目次
5. ELK Elasticsearch クラスターのデプロイメント (Node1 および Node2 ノードで動作)
2. Elasticsearch ソフトウェアをデプロイする
3.Elasticsearch-head プラグインをインストールする
6. ELK Logstash デプロイメント (Apache ノード上で動作)
1.ELKの概要
ELK プラットフォームは、 ElasticSearch、Logstash、Kiabanaの 3 つのオープン ソース ツールを使用して、より強力なユーザーのログ クエリ、並べ替え、統計のニーズを満たせる完全な集中ログ処理ソリューションです。
●ElasticSearch : Lucene (全文検索エンジンアーキテクチャ) に基づいて開発された分散ストレージ検索エンジンであり、さまざまなログの保存に使用されます。
Elasticsearch は Java で開発され、ユーザーがブラウザを通じて Elasticsearch と通信できるようにする RESTful Web インターフェイスを提供します。
Elasticsearch は、全文構造化検索を可能にする、リアルタイムの分散型でスケーラブルな検索エンジンです。一般に、大量のログ データのインデックス作成と検索に使用され、さまざまな種類のドキュメントの検索にも使用できます。
1秒●Kibana : Kibana は通常、Elasticsearch と一緒にデプロイされます. Kibana は、Elasticsearch の強力なデータ視覚化ダッシュボードです. Kibana は、Elasticsearch ログ データを参照するためのグラフィカル Web インターフェイスを提供し、重要なデータの要約、分析、検索に使用できます。
●Logstash : データ収集エンジンとして。さまざまなデータソースからのデータの動的収集、フィルタリング、分析、強化、形式の統一などをサポートし、ユーザーが指定した場所に保存し、通常は Elasticsearch に送信します。
Logstash は Ruby 言語で記述され、Java 仮想マシン (JVM) 上で動作し、データの送信、フォーマット処理、フォーマットされた出力を実現できる強力なデータ処理ツールです。Logstash には強力なプラグイン機能があり、ログ処理によく使用されます。
機能:入力(データ収集)フィルター(データフィルタリング)出力(データ出力)#追加できるその他のコンポーネント:
●Filebeat : 軽量なオープンソースのログファイルデータコレクター。Filebeat は通常、データを収集する必要があるクライアントにインストールされ、ディレクトリとログ形式が指定されます。Filebeat はデータを迅速に収集し、それを logstash に送信するか、保存のために直接 Elasticsearch に送信できます。JVM 上で実行される logstash よりも明らかなパフォーマンス上の利点があります。 . がその代替品です。EFLK アーキテクチャでよく使用されます。行解析、
#filebeat は、logstash と組み合わせると次の利点をもたらします。
1) Logstash には、受信スループットを吸収するディスクベースの適応バッファリングシステムがあるため、Elasticsearch への継続的なデータ書き込みのプレッシャーが軽減されます。
2) 他のデータ ソースから (データベース、S3 からのプルなど) 3) S3、HDFS (Hadoop Distributed File System) などの複数の宛先
にデータを送信するか、ファイルに書き込む
4) 条件付きデータ フロー ロジックを使用して、より複雑な処理パイプラインを構成する
●キャッシュ/メッセージ キュー (redis、kafka、RabbitMQ など) : トラフィックのピークカットと、同時実行性の高いログ データのバッファリングを実行できます。このようなバッファリングにより、データをある程度損失から保護し、アーキテクチャ全体をデータから分離することもできます。アプリケーション。
●Fluentd : 人気のオープンソース データ コレクターです。Logstashは重すぎる、パフォーマンスが低い、リソース消費が多いなどの欠点があったため、Fluentdが登場しました。logstash と比較すると、Fluentd は使いやすく、リソースの消費が少なく、パフォーマンスが高く、データ処理の効率性と信頼性が高いため、企業に歓迎され、logstash の代替となり、EFK アーキテクチャでよく使用されています。EFK は、Kubernetes クラスターのログ データ収集ソリューションとしてもよく使用されます。
Kubernetes クラスターでは、通常、Fluentd は DaemonSet を通じて実行され、各 Kubernetes ワーカー ノードでポッドを実行できます。これは、コンテナーのログ ファイルを取得し、ログ データをフィルター処理して変換し、そのデータを Elasticsearch クラスターに渡し、そこでインデックス付けおよび保存されることで機能します。
2. ELK を使用する理由
- ログには主にシステム ログ、アプリケーション ログ、セキュリティ ログが含まれます。システムの運用と保守および開発者は、ログを使用してサーバー ソフトウェアとハードウェアの情報を理解し、構成プロセスのエラーとエラーの原因を確認できます。ログを頻繁に分析すると、サーバーの負荷、パフォーマンス、セキュリティを理解し、エラーを修正するためのタイムリーな措置を講じることができます。
- 多くの場合、基本的には grep や awk などのツールを使用して 1 台のマシンのログの単純な分析を実現できますが、ログが分散して別のデバイスに保存されている場合があります。数十または数百のサーバーを管理している場合は、各マシンに順番にログインしてログを表示するという従来の方法を依然として使用しています。これはとても面倒で非効率だと思いませんか? オープンソースの syslog などの集中ログ管理を使用して、すべてのサーバー上のログを収集して要約することが不可欠です。ログを集中管理するようになってから、ログの統計と取得はさらに面倒なものになりました。通常、取得と統計には grep、awk、wc などの Linux コマンドを使用できますが、クエリ、並べ替え、統計などのより高度な要件の場合は、マシンの数が膨大なため、この方法がまだ不十分であることは避けられません。
- 一般に、大規模システムは分散配置アーキテクチャを採用しており、異なるサービスモジュールが異なるサーバに配置されているため、問題が発生した場合、ほとんどの場合、システムから公開されるキー情報を基に、特定のサーバおよびサービスモジュールを特定する必要があります。ログ システムを使用すると、問題を特定する効率が向上します。
3. 完全ログシステムの基本機能
収集: 複数のソースからログ データを収集できます。
送信: ログ データを安定して解析、フィルタリングし、ストレージ システムに送信できます。 ストレージ
: ログ データを保存します。
分析: UI 分析をサポートします。
警告: エラー レポートと監視メカニズムを提供できます。
4.ELKの動作原理:
(1) ログを収集する必要があるすべてのサーバーに Logstash を展開するか、最初にログ サーバーでログを一元管理し、ログ サーバーに Logstash を展開します。
(2) Logstash はログを収集し、フォーマットして Elasticsearch クラスターに出力します。
(3) Elasticsearch は、フォーマットされたデータにインデックスを付けて保存します。
(4) Kibana は ES クラスターからデータをクエリしてチャートを生成し、フロントエンド データを表示します。概要: Logstash はログ コレクターとして、データ ソースからデータを収集し、データをフィルター処理してフォーマットしてから Elasticsearch に送信して保存し、Kibana がログの視覚的処理を実行します。
5. ELK Elasticsearch クラスターのデプロイメント (Node1 および Node2 ノードで動作)
1. 環境整備
Node1节点(2C/4G):node1/192.168.181.101 Elasticsearch Kibana
Node2节点(2C/4G):node2/192.168.181.102 Elasticsearch
Apache节点:apache/192.168.10.15 Logstash Apache
systemctl stop firewalld
setenforce 0
注:版本问题
java -version #如果没有安装,yum -y install java
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
建议使用jdk
2. Elasticsearch ソフトウェアをデプロイする
(1)安装elasticsearch—rpm包
#上传elasticsearch-5.5.0.rpm到/opt目录下
cd /opt
rpm -ivh elasticsearch-5.5.0.rpm
(2)加载系统服务
systemctl daemon-reload
systemctl enable elasticsearch.service
(3)修改elasticsearch主配置文件
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
vim /etc/elasticsearch/elasticsearch.yml
--17--取消注释,指定集群名字
cluster.name: my-elk-cluster
--23--取消注释,指定节点名字:Node1节点为node1,Node2节点为node2
node.name: node1
--33--取消注释,指定数据存放路径
path.data: /data/elk_data
--37--取消注释,指定日志存放路径
path.logs: /var/log/elasticsearch/
--43--取消注释,改为在启动的时候不锁定内存
bootstrap.memory_lock: false
--55--取消注释,设置监听地址,0.0.0.0代表所有地址
network.host: 0.0.0.0
--59--取消注释,ES 服务的默认监听端口为9200
http.port: 9200
--68--取消注释,集群发现通过单播实现,指定要发现的节点 node1、node2
discovery.zen.ping.unicast.hosts: ["node1", "node2"]
grep -v "^#" /etc/elasticsearch/elasticsearch.yml
(4)创建数据存放路径并授权
mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/
(5)启动elasticsearch是否成功开启
systemctl start elasticsearch.service
netstat -antp | grep 9200
(6)查看节点信息
浏览器访问 http://192.168.181.101:9200 、 http://192.168.181.102:9200 查看节点 Node1、Node2 的信息。
浏览器访问 http://192.168.181.101:9200/_cluster/health?pretty 、 http://192.168.10.14:9200/_cluster/health?pretty查看群集的健康情况,可以看到 status 值为 green(绿色), 表示节点健康运行。
浏览器访问 http://192.168.181.101:9200/_cluster/state?pretty 检查群集状态信息。
#使用上述方式查看群集的状态对用户并不友好,可以通过安装 Elasticsearch-head 插件,可以更方便地管理群集。
3.Elasticsearch-head プラグインをインストールする
- Elasticsearch バージョン 5.0 以降では、Elasticsearch-head プラグインを独立したサービスとしてインストールする必要があり、npm ツール (NodeJS パッケージ管理ツール) を使用してインストールする必要があります。
- Elasticsearch-head をインストールするには、依存するソフトウェア ノードと phantomjs を事前にインストールする必要があります。
- node: は、Chrome V8 エンジンに基づく JavaScript 実行環境です。
- phantomjs: これは、Webkit ベースの JavaScript API であり、目に見えないブラウザとして理解でき、Webkit ベースのブラウザで実行できることはすべて実行できます。
(1)编译安装 node
#上传软件包 node-v8.2.1.tar.gz 到/opt
yum install gcc gcc-c++ make -y
cd /opt
tar zxvf node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure
make && make install
(2)安装 phantomjs(前端的框架)
#上传软件包 phantomjs-2.1.1-linux-x86_64.tar.bz2 到
cd /opt
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/
cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin
(3)安装 Elasticsearch-head 数据可视化工具
#上传软件包 elasticsearch-head.tar.gz 到/opt
cd /opt
tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/
cd /usr/local/src/elasticsearch-head/
npm install
(4)修改 Elasticsearch 主配置文件
vim /etc/elasticsearch/elasticsearch.yml
......
--末尾添加以下内容--
http.cors.enabled: true #开启跨域访问支持,默认为 false
http.cors.allow-origin: "*" #指定跨域访问允许的域名地址为所有
systemctl restart elasticsearch
(5)启动 elasticsearch-head 服务
#必须在解压后的 elasticsearch-head 目录下启动服务,进程会读取该目录下的 gruntfile.js 文件,否则可能启动失败。
cd /usr/local/src/elasticsearch-head/
npm run start &
> [email protected] start /usr/local/src/elasticsearch-head
> grunt server
Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100
#elasticsearch-head 监听的端口是 9100
netstat -natp |grep 9100
(6)通过 Elasticsearch-head 查看 Elasticsearch 信息
通过浏览器访问 http://192.168.10.13:9100/ 地址并连接群集。如果看到群集健康值为 green 绿色,代表群集很健康。
(7)插入索引
#通过命令插入一个测试索引,索引为 index-demo,类型为 test。
//输出结果如下:curl -X PUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
{
"_index" : "index-demo",
"_type" : "test",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 2,
"failed" : 0
},
"created" : true
}
浏览器访问 http://192.168.181.101:9100/ 查看索引信息,可以看见索引默认被分片5个,并且有一个副本。
点击“数据浏览”,会发现在node1上创建的索引为 index-demo,类型为 test 的相关信息。
6. ELK Logstash デプロイメント (Apache ノード上で動作)
Logstash は通常、ログを監視する必要があるサーバーにデプロイされます。この場合、Logstash は Apache サーバーにデプロイされ、Apache サーバーからログ情報を収集し、Elasticsearch に送信します。
1.更改主机名
hostnamectl set-hostname apache
2.安装Apahce服务(httpd)
yum -y install httpd
systemctl start httpd
3.安装Java环境
yum -y install java
java -version
4.安装logstash
#上传软件包 logstash-5.5.1.rpm 到/opt目录下
cd /opt
rpm -ivh logstash-5.5.1.rpm
systemctl start logstash.service
systemctl enable logstash.service
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
5.测试 Logstash
Logstash 命令常用选项:
-f:通过这个选项可以指定 Logstash 的配置文件,根据配置文件配置 Logstash 的输入和输出流。
-e:从命令行中获取,输入、输出后面跟着字符串,该字符串可以被当作 Logstash 的配置(如果是空,则默认使用 stdin 作为输入,stdout 作为输出)。
-t:测试配置文件是否正确,然后退出。
定义输入和输出流:
#输入采用标准输入,输出采用标准输出(类似管道)
logstash -e 'input { stdin{} } output { stdout{} }'
......
www.baidu.com #键入内容(标准输入)
2020-12-22T03:58:47.799Z node1 www.baidu.com #输出结果(标准输出)
www.sina.com.cn #键入内容(标准输入)
2017-12-22T03:59:02.908Z node1 www.sina.com.cn #输出结果(标准输出)
//执行 ctrl+c 退出
#使用 rubydebug 输出详细格式显示,codec 为一种编解码器
logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
......
www.baidu.com #键入内容(标准输入)
{
"@timestamp" => 2020-12-22T02:15:39.136Z, #输出结果(处理后的结果)
"@version" => "1",
"host" => "apache",
"message" => "www.baidu.com"
}
#使用 Logstash 将信息写入 Elasticsearch 中
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.10.13:9200"] } }'
输入 输出 对接
......
www.baidu.com #键入内容(标准输入)
www.sina.com.cn #键入内容(标准输入)
www.google.com #键入内容(标准输入)
//结果不在标准输出显示,而是发送至 Elasticsearch 中,可浏览器访问 http://192.168.10.13:9100/ 查看索引信息和数据浏览。
6.定义 logstash配置文件
Logstash 配置文件基本由三部分组成:input、output 以及 filter(可选,根据需要选择使用)。
input:表示从数据源采集数据,常见的数据源如Kafka、日志文件等
filter:表示数据处理层,包括对数据进行格式化处理、数据类型转换、数据过滤等,支持正则表达式
output:表示将Logstash收集的数据经由过滤器处理之后输出到Elasticsearch。
#格式如下:
input {...}
filter {...}
output {...}
#在每个部分中,也可以指定多个访问方式。例如,若要指定两个日志来源文件,则格式如下:
input {
file { path =>"/var/log/messages" type =>"syslog"}
file { path =>"/var/log/httpd/access.log" type =>"apache"}
}
#修改 Logstash 配置文件,让其收集系统日志/var/log/messages,并将其输出到 elasticsearch 中。
chmod +r /var/log/messages #让 Logstash 可以读取日志
vim /etc/logstash/conf.d/system.conf
input {
file{
path =>"/var/log/messages" #指定要收集的日志的位置
type =>"system" #自定义日志类型标识
start_position =>"beginning" #表示从开始处收集
}
}
output {
elasticsearch { #输出到 elasticsearch
hosts => ["192.168.181.101:9200"] #指定 elasticsearch 服务器的地址和端口
index =>"system-%{+YYYY.MM.dd}" #指定输出到 elasticsearch 的索引格式
}
}
systemctl restart logstash
浏览器访问 http://192.168.181.101:9100/ 查看索引信息