【给超级初学者的】ELK Stack超新手入门指南(2021年版本)
首先
最近我研究了一下ELKStack这个东西,但是因为找不到能够解决问题的文章,所以我打算留个备忘。
可能是因为版本升级了的缘故,事情并没有像预想的那么顺利。嗯。
特别是Kibana。
这个问题真的很棘手。
好了,闲话就说到这里,接下来就来谈谈我已经很久没有写的ELKStack。
有些人可能会想,那到底是什么东西?关于这些我会在后面进行解释。
目录
这是本文的目录。请只挑选出必要的部分。
-
- ELKStackとは
-
- Elasticsearch
Elasticsearchの基本的な使い方
Logstash
Logstashの基本的な使い方
Kibana
Kibanaの基本的な使い方
EX
FilebeatとLogstashの連携
Logstashでオリジナルフォーマットの読み込みを定義して使う
Logstashで複数のファイルからログを抽出
ELKStack是什么
筆者自己其實也不太清楚,但這是關於Elastic公司的產品(Elasticsearch,Logstash,Kibana)組成的分析環境吧?
首先,我想減少日誌分析所花的時間,所以我開始學習這些東西。
我稍後會提到每個產品的概述和角色,但使用它們可以快速整理伺服器日誌和應用程式日誌。
每个人的角色
就像前面提到的那样,ELK Stack是将Elastic公司的产品结合起来的分析环境。下面简要介绍每个组成部分以及它们在本次案例中的作用。
データ解析やなんやらで有名企業の社内システムなどで導入されているようです。Logstashが抽出したデータを蓄積し、検索したい条件に合わせて蓄積したデータを検索します。7.16.3Logstashログ収集ツールです。
DBやファイルからログを収集、変換してElasticsearchにデータを投入します。
ログでなくてもデータは収集できるのですが、その名の通りログの収集に使われることが多いようです。左記のとおり、アプリケーションログファイルの内容を抽出、変換し、Elasticsearchに投入します。左記のとおり、アプリケーションログファイルの内容を抽出、変換し、Elasticsearchに挿入します。KibanaElasticseachが蓄積したデータを可視化する画面機能です。
KQLと言う独自言語でElasticsearch内に蓄積したデータを検索したり、統計を取ってグラフ化したりいろんなことができます。収集したログデータから一部を抽出し、可視化します。7.16.3
這一次,我們將一次性地搭建這些,不用說,您也可以單獨搭建並用於自己的個人應用程序中,所以如果您有興趣,請趁此機會嘗試一下各種不同的方法。
接下來,我將按產品進行安裝和設置,按章節進行介紹。
弹性搜索
Elasticsearch的部署环境
首先,需要搭建Elasticsearch的运行环境。
下载
我們將從這裡下載符合您環境的文件。
這次我們將介紹Windows版本,所以請下載Windows版。
Logstash和Kibana也可以從同一個地方下載,所以請先下載好。
另外,如果沒有安裝Java將無法運行,若未安裝請先安裝Java8或更高版本。
安装
只需解压之前下载的Zip文件即可完成安装。
然后只需运行位于解压后文件夹中的<解压的文件夹\bin>目录下的elasticsearch.bat文件即可启动。
※从这之后,解压的文件夹将被称为ELASTIC_HOME。
Elasticsearch的配置
虽然启动本身不需要任何操作,但是这次我们还要构建Kibana环境,所以要进行设置,以便从Kibana直接修改Elasticsearch的内容。
配置文件最初都被注释掉了,没有有效的行。
根据构建的环境,我们要修改主机和端口号。
这次,请在注释后的最后一行添加 “http.cors.enabled: true”。
■变更的文件
ELASTIC_HOME\elasticsearch.yml
■添加以下内容:
http.cors.enabled: true
# この行以外はすべてコメントです。
# 必要なければ消してもいいですし、ポート番号など必要応じてコメントを復活し、内容を変更しましょう。
http.cors.enabled: true
如果不更改任何設定,將使用以下設定來啟動。
-
- 動作するホスト:localhost
- ポート番号:9200
我将在此处记录解压缩后的文件树结构。
ELASTIC_HOME
│
├─bin
│ elasticsearch.bat
│ ・・・省略
│
├─config
│ │ elasticsearch-plugins.example.yml
│ │ elasticsearch.keystore
│ │ elasticsearch.yml ★変更する設定ファイル
│ │ jvm.options
│ │ log4j2.properties
│ │ roles.yml
│ │ role_mapping.yml
│ │ users
│ │ users_roles
│ │
│ └─jvm.options.d
├─data
│ ・・・省略
│
├─jdk
│ ・・・省略
├─lib
│ ・・・省略
├─logs
│ ・・・省略
│
├─modules
│ ・・・省略
│
└─plugins
开始
启动
让我们启动Elasticsearch吧。
启动的方法很简单,只需执行ELASTICK_HOME\bin\elasticsearch.bat即可。
启动后的确认
注册样本数据
让我们尝试在Elasticsearch中注册示例数据。
Elasticsearch附带了Web服务器功能,可以通过REST API进行操作,并且可以通过将HTTP请求发送到正在运行的主机和端口来注册和搜索数据。
请求体的格式是Json。
准备以下文件,让我们立即注册数据。
{
"user_name": "TARO 太郎",
"date": "2022-02-01T10:09:01",
"message": "【超初心者向け】Elasticsearch超入門"
}
以下是关于Body以外的请求信息:
非Body部分的请求信息如下。
-
- メソッド:Post
-
- リクエスト形式:http://ホスト:ポート/index/type[/?pretty] ※末尾に「?pretty」をつけると、返却値のJsonが整形して返却されます。
-
- URL:http://localhost:9200/sample_index/sample_type/?pretty
- ヘッダ:“Content-Type”:”application/json”
搜索样本数据
我们来搜索已注册的样本数据。
搜索将通过GET请求进行。
由于Elasticsearch是一个搜索引擎,所以当然可以进行模糊搜索。
如果要进行模糊搜索,请使用Json格式请求条件。
{
"query": {
"match": {
"message": "超入門"
}
}
}
Elasticsearch概述
Elasticsearch的环境设置和基本使用方式就到这里为止了。我会为您总结之前的要点。
-
- インストールは解凍するだけ
-
- Kibanaから直接いじれる設定を入れる ※ここではまだ威力を発揮していません
-
- elasticsearch.batで起動
- JsonのREST APIを使用してデータの登録や検索が可能
下一章是关于Logstash的内容。
我们将进入关于构建Elasticsearch的实践部分,请期待。
记录器
Logstash是什么
这个产品可以提取、分析各种格式的日志,并将数据注册到Elasticsearch中。
不仅可以处理文本,还可以从CSV、数据库获取数据,甚至能从Excel中导入数据。
筆者不确定它的威力有多大,只有深入研究了才知道。
如果有尝试过的人,请务必留下评论。
構建Logstash環境
我会从这里开始构建Logstash的运行环境。
下载
由于在前一章中已经下载了Elasticsearch,因此这里的描述将被省略。
安装
与 Elasticsearch 相似,只需要解压下载的文件。
但是,必须在进行配置后才能启动。
首先我们将进行配置文件的设置,但是先把解压后的目录树记录下来。
※在此之后我们将使用解压的文件夹称为 LOGSTASH_HOME。
LOGSTASH_HOME
│ CONTRIBUTORS
│ Gemfile
│ Gemfile.lock
│ LICENSE.txt
│ NOTICE.TXT
│
├─bin
│ logstash.bat
│ ・・・省略
│
├─config
│ jvm.options
│ log4j2.properties
│ logstash-sample.conf
│ logstash.yml
│ pipelines.yml
│ startup.options
│
├─data
├─jdk
│ ・・・省略
├─lib
│ ・・・省略
├─logstash-core
│ ・・・省略
├─logstash-core-plugin-api
│ ・・・省略
├─tools
│ ・・・省略
├─vendor
│ ・・・省略
└─x-pack
・・・省略
准备样品
首先,我们将尝试在最简单和基本的设置下运行一个名为Logstash的工具。
在进行设置之前,请准备好要用作示例的文件。
在任意目录下,创建一个包含以下内容的文件。
※我们将准备两个示例文件,但一个也没问题。
Date,Level,ErrorMessage,UserIde
2022-01-31 10:00:00,INFO,1-1情報です,1
2022-01-31 11:00:00,ERROR,1-1エラーです,1
2022-01-31 10:00:00,INFO,2-1情報です,1
2022-01-31 11:00:00,ERROR,2-1エラーです,1
2022-01-31 12:00:00,WARN,2-1警告です,1
2022-02-01 10:00:00,ERROR,2-2エラーです,1
2022-02-01 11:00:00,ERROR,2-3エラーです,1
2022-02-01 12:00:00,ERROR,2-4エラーです,1
Logstash 的配置设置
由于样本已经准备好了,我们将进行读取设置。
在LOGSTASH_HOME\config目录下复制logstash-sample.conf文件,并对其中内容进行修改。
将文件名改为“csv-sample.conf”。
Logstash的配置文件将按照Json的方式进行定义。
# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.
# 入力の設定
# ここではファイルを使用しますが、標準入力から受け付けたりもできます。
input {
file {
# 末尾を読み込むモード
mode => "tail"
# 対象ファイル
# Windowsでも"/"を使う
path => ["C:/Users/tarosa/Desktop/Elastic/sample/csv/*.csv"]
# ファイルのどこまで読み込んだか記録しておくファイル
# ここではLOGSTASH_HOMEに配置しています
# なくても動くかも?
# 拡張子は「.sincedb」
sincedb_path => "../csv-sample.sincedb"
# 読み込み開始位置など
start_position => "beginning"
codec => plain {
charset => "UTF-8"
}
}
}
# ファイルのフォーマットに合わせた解析設定
filter {
csv {
columns => ["Date", "Level", "ErrorMessage", "UserId"]
convert => {
# フィールドのデータはここで任意に変換できます
"UserID" => "integer"
}
# ヘッダー行を読み飛ばし
skip_header => true
}
# 取り込み後タイムスタンプを判定する行を指定します
date {
match => ["Date", "yyyy-MM-dd HH:mm:ss"]
}
}
# 出力先の設定
output {
# Elasticsearchに設定
# 構築したElasticsearchに合わせます
elasticsearch {
hosts => ["http://localhost:9200"]
index => "csv-sample"
}
# デバッグ用に標準出力にも出力しておきます
stdout {
codec => rubydebug
}
}
只列出設定部分,設定完成後的樹狀結構如下。
LOGSTASH_HOME
│ ・・・省略
├─bin
│ logstash.bat
│ ・・・省略
│
├─config
│ jvm.options
│ log4j2.properties
│ logstash-sample.conf
│ logstash.yml
│ pipelines.yml
│ startup.options
│ csv-sample.conf ★このファイルを新規作成
│
├─data
├─jdk
│ ・・・省略
├─lib
│ ・・・省略
├─logstash-core
│ ・・・省略
├─logstash-core-plugin-api
│ ・・・省略
├─tools
│ ・・・省略
├─vendor
│ ・・・省略
└─x-pack
・・・省略
启动Logstash
完成设置和示例数据后,现在开始启动Logstash。
一旦启动,它将立即开始读取文件,所以请确保Elasticsearch已经启动。
启动方式是使用”logstash.bat”,并指定配置文件作为参数。
在本例中,打开命令提示符,并使用以下命令启动。
命令:logstash.bat -f ../config/csv-sample.conf
整理Logstash
关于Logstash的环境搭建和基本使用方法的介绍就到这里了。
我将总结一下之前的要点。
-
- インストールは解凍するだけ
-
- Jsonライクに設定を追加
- logstash.batで起動
到目前为止,我们已经建立了一个可以存储日志数据并进行注册的数据库。从下一章开始,我们将介绍如何利用这些存储的数据。
Kibana: Kibana
Kibana是什么?
这是一个可以将存储在Elasticsearch中的数据可视化的图形用户界面工具。界面使用Web应用程序,并使用浏览器访问。它使用的是KQL语言,可以搜索和绘制任何存储在Elasticsearch中的数据,包括通过Logstash存储的日志数据。
搭建Kibana环境。
从这里开始构建Kibana环境。
下载
因为在前一章中已经与Elasticsearch一起下载了,所以这里省略了相关内容。
安装
和其他产品一样,只需解压下载的文件。
但是,在进行配置之前无法启动。
首先我们会进行配置文件的设置,但是我们会先列出解压后的目录树。
※这里后续会将解压的文件夹称为KIBANA_HOME。
KIBANA_HOME
│ ・・・省略
│
├─bin
│ kibana-encryption-keys.bat
│ kibana-keystore.bat
│ kibana-plugin.bat
│ kibana.bat
│
├─config
│ kibana.yml
│ node.options
│
├─data
├─node
│ node.exe
│
├─node_modules
│ ・・・省略
│
├─plugins
├─src
│ ・・・省略
几乎是整个省略,重要的只有bin和config。
开机前的设置
如果Elasticsearch是使用默认设置的话,几乎不需要对Kibana进行配置。
但是默认情况下,所有配置都被注释掉了,所以需要取消注释Elasticsearch的主机和端口。
可以编辑位于KIBANA_HOME\config目录下的kibana.yml文件。
■需要更改的文件:KIBANA_HOME\config\kibana.yml
■编辑的内容
恢复Elasticsearch的注释功能。
根据需要修改主机和端口。
#elasticsearch.hosts: [“http://localhost:9200”]
↓
elasticsearch.hosts: [“http://localhost:9200”]
elasticsearch.hosts: ["http://localhost:9200"]
启动Kibana
只需要启动批处理文件就可以了。
与Logstash一样,也要启动Elasticsearch。
使用KIBANA_HOME\bin\kibana.bat,并立即启动它。
※由于输出太多,省略了控制台图像。
访问Kibana
当控制台显示出长字符串并且即将运行时,让我们从浏览器访问Kibana。
默认访问链接为“http://localhost:5601”。
如果主机或端口等有更改,请适当修改。
如果页面显示出来,则启动完成。
第一次将显示欢迎页,但之后则不再显示。
这里省略了,但也有教程,如果您感兴趣,请尝试一下。
后续的操作
让我们立刻开始使用吧。
首先,从“自行探索”按钮开始继续前进。
将会转到主页屏幕。
定制化
终于到了正式的时间。
我将开始按照自己的喜好自定义Kibana。
创建索引模式
首先,我们需要从Kibana读取Elasticsearch的数据。
为此,首先需要创建一个称为索引模式的东西,但是很多文章都省略了这个步骤,作者在这里遇到了困难。
在各种文章中,当你点击”here”链接时会有一句话,您现在看的屏幕应该很清楚。
是的,它不存在。
“不,不存在!”是的。
在到达这里之前花了很多时间…
好的,重新集中精力创建索引模式。
从这里开始,我们将在Kibana的界面上进行介绍。
使用KQL进行搜索。
现在我们已经准备好在Kibana上查看数据了,让我们快速开始吧。
首先,我们将使用一种名为KQL的搜索语言来查看。
创建仪表盘 (Chuangjian yibiao pan)
到目前为止,我们已经成功使用Kibana从Elasticsearch中检索注册的数据。
然而,在这种Json的状态下,GUI工具并没有意义。
因此,我们需要创建仪表板进行可视化展示。
Kibana摘要
以下是 Kibana 的基本介绍。我会将要点总结如下。
-
- インストールは解凍するだけ
-
- 設定ではElasticsearchの設定をコメントを復活させる
-
- インデックスパターンを作成する
-
- KQLでデータを閲覧可能
- ダッシュボードを使用してデータのビジュアライゼーションが可能
现在,Kibana的介绍就到这里结束了,以上就是ELK Stack所使用的产品的介绍。
只要了解了这些要素,就可以做很多事情了。
接下来的章节是额外部分,对于不了解也没关系,但了解的话可能会更方便。
如果您感兴趣,请继续阅读至最后。
从多个远程服务器收集和存储日志进行尝试
我是Extra编辑。
在这里,我将介绍如何使用产品Filebeat从多个远程服务器收集和存储日志。
Filebeat是什么
这是一个可以监视文件并提取数据的工具。
你可能会问,它和Logstash有什么区别呢?筆者也不太清楚。
根据介绍文章看,Filebeat似乎更轻量一些。
但与此同时,它不能像Logstash那样做很多事情。
如果你想从多个服务器收集和分析日志,使用Filebeat似乎是很流行的选择哦。
如果你只是想收集某个服务器上的日志,那么直接在该服务器上安装Logstash就可以了,但我想尝试使用Filebeat来收集多个日志并投入到Logstash和Elasticsearch中。
Filebeat和Logstash的协作
首先,根据以上说明,我们将在这里使Filebeat与Logstash进行协同配合。
首先,我们将搭建Filebeat的执行环境。
構建Filebeat環境
请下载Filebeat。
从与Elasticsearch相同的网页上下载Filebeat的Zip版。尽管还有安装版,但个人推荐使用Zip版,因为只需解压即可安装,无需使用安装程序。接下来的内容将以Zip版为前提进行说明。
安裝
这个也跟其他的产品一样,只需要解压Zip文件。
解压后的文件树列表如下。
这个也将解压后的文件夹设为FILEBEAT_HOME。
FILEBEAT_HOME
│ .build_hash.txt
│ fields.yml
│ filebeat.exe
│ filebeat.reference.yml
│ filebeat.yml
│ install-service-filebeat.ps1
│ LICENSE.txt
│ NOTICE.txt
│ README.md
│ uninstall-service-filebeat.ps1
│
├─kibana
│ ・・・省略
│
├─module
│
└─modules.d
・・・省略
Filebeat的配置设置
在这里,我们将进行文件读取设置和提取的日志输出(Logstash)的设置。
样本文件将稍后准备,现在开始进行Filebeat的设置。
要更改的文件是 “FILEBEAT_HOME\filebeat.yml”。
由于该文件几乎全部被注释掉了,因此只需取消必要部分的注释并修改内容。
由于不知何故只启用了将输出发送到Elasricsearch的设置,我们将对该部分进行注释。
#output.elasticsearch:
# Array of hosts to connect to.
#hosts: ["localhost:9200"]
# Logstashのところを復活し、適宜変更します。
# ------------------------------ Logstash Output -------------------------------
output.logstash:
# The Logstash hosts
hosts: ["localhost:5044"]
# 読み込ませるファイル情報です。
filebeat.inputs:
- input_type: log
paths:
# 後程作成するサンプルファイルです。
- C:/Users/tarosa/Elastic/sample/log/log-sample.log
准备样本日志
虽然使用与Logstash相同的CSV文件也可以,但实际的日志通常是以文本形式呈现的,很少能整齐地以逗号分隔。重复做同样的事情没有意思,所以我想使用自定义的文件格式。
2022-02-20 10:00:00.000 [Thread1] DEBUG 処理開始
2022-02-20 10:01:23.456 [Thread1] INFO 処理開始を開始します。
2022-02-20 10:02:34.678 [Thread2] ERROR サンプルのエラー1です。
2022-02-20 10:02:35.000 [Thread2] ERROR サンプルのエラー2です。
2022-02-20 10:05:00.000 [Thread1] DEBUG 処理終了
2022-02-20 10:06:00.000 [Thread1] INFO 処理終了を終了します。
2022-02-20 10:06:01.000 [Thread1] WARN Thread2でエラーがありました。
这是一种常见的格式,但这次我们将使用这个作为示例。
配置Logstash
由于使用Logstash进行日志分析和导入,因此还需要设置Logstash。在保持先前使用的CSV设置不变的基础上,我们将添加导入多个日志的设置。总共有3件事要做。
-
- オリジナルパターンの定義ファイルを追加
-
- 追加したパターンを使用した取り込み設定を追加
- Logstashに複数ファイルを取り込めるように設定を追加
原始模式的定义文件
首先,我们创建一个用于解析原始格式的模式定义文件。
在「LOGSTASH_HOME\config」目录下创建以下文件。
Logstash的模式遵循以下规则进行定义。
-
- パターンの定義は正規表現を使用する
-
- ファイル拡張子は「.d」とする
- フォーマットは「パターン名 パターンを拾うための正規表現」とする
这次我们将添加新的定义,但是由于Logstash默认已经定义了可用于模式的正则表达式,所以在创建模式定义时,您也可以使用预定义的模式。
LOG_DATETIME (\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})\.(\d{3})
THREAD_NAME \[.*\]
SAMPLE_LOG_PATTERN %{LOG_DATETIME:logdate} %{THREAD_NAME:thread} %{LOGLEVEL:level} %{GREEDYDATA:logmessage}
添加导入设置
和CSV样本一样,要进行Logstash的导入设置。
在”LOGSTASH_HOME \ config”下,添加一个用于从Filebeat读取日志的配置文件。
这次不仅定义了日志导入,还进行了用于读取多个文件的设置。
导入示例日志的配置
# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.
input {
# 入力のソースはFilebeatを使うので、beatsを指定します。
beats {
port => "5044"
}
}
filter {
# 入力した文字列の解析にはGrokプラグインを使用します。
grok {
# パターンファイルのディレクトリは、先ほど作成したパターンファイルのディレクトリを指定します。
# このファイルと同じディレクトリにあるファイルに、「../」を付加しているのは、読み込みはLogstashを実行したディレクトリの相対パスとなるからです。
# こちらはサンプルとして相対パスを使用しますが、必要なければ絶対パスを指定するのが無難です。
patterns_dir => ["../config/log-sample.d"]
# messageはパターンファイルに定義したものをにmatchさせます。
match => {"message" => "%{SAMPLE_LOG_PATTERN}"}
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "filebeat-log-sample"
}
stdout {
codec => rubydebug
}
}
管道配置
为了同时导入多个日志,需要添加管道设置。
在Logstash中,将输入流形象地称为”管道”。
在这里,我们定义了一个用于CSV导入的管道和一个用于从Filebeat接收日志的管道。
要定义管道,需要编辑”LOGSTASH_HOME\config\pipelines.yml”。
此文件中的所有内容最初都被注释掉,所以只需要取消注释并编辑所需的部分。
由于内容太多,所以只摘录必要的部分。
# CSVサンプル用のパイプライン
- pipeline.id: csv-sample
pipeline.workers: 1
pipeline.batch.size: 1
# ここで詳細は指定せず、先ほど定義した設定を読み込みます。
# config.string: "input { generator {} } filter { sleep { time => 1 } } output { stdout { codec => dots } }"
# ここでも相対パスを指定する場合は「../」を付加します。
path.config: "../config/csv-sample.conf"
# Filebeat用のパイプライン
- pipeline.id: filebeat-log-sample
queue.type: persisted
path.config: "../config/filebeat-log-sample.conf"
完全设置之后的树结构
刚刚的树上,新创建的文件增加了。
LOGSTASH_HOME
│ ・・・省略
├─bin
│ logstash.bat
│ ・・・省略
│
├─config
│ jvm.options
│ log4j2.properties
│ logstash-sample.conf
│ logstash.yml
│ pipelines.yml ★ここは編集
│ startup.options
│ csv-sample.conf
│ log-sample.d ★ここに追加
│ filebeat-log-sample.conf ★ここに追加
│
├─data
├─jdk
│ ・・・省略
├─lib
│ ・・・省略
├─logstash-core
│ ・・・省略
├─logstash-core-plugin-api
│ ・・・省略
├─tools
│ ・・・省略
├─vendor
│ ・・・省略
└─x-pack
・・・省略
启动
终于启动环境。
Elasticsearch与之前一样,但是Logstash的启动命令稍有不同,请使用以下命令启动。
命令:logstash.bat –path.settings ../config
在Kibana上查看
最后
非常感谢您阅读完这篇长篇文章。
ELKStack是一个能够使日志分析等各种工作变得更轻松的工具。
本文介绍了其中的一部分世界。
如果有哪怕一个人能够通过使用这个产品来提高工作效率,请相信作为作者,我将会非常高兴。