案例:ELK日志分析系统
Posted 大虾好吃吗
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了案例:ELK日志分析系统相关的知识,希望对你有一定的参考价值。
前言:日志分析是运维工程师解决系统故障、发现问题的主要手段。日志包含多种类型,包括程序日志、系统日志以及安全日志等。通过对日志的分析可以快速定位故障点,也可以通过日志了解服务器的软件信息、硬件信息、服务器负荷以及安全性相关的信息。
目录
🍤:大虾好吃吗
🍤:选择大于努力
🍤:持续更新,一起成长!喜欢的朋友可以关注,谢谢!❤️
🍤ELK
ELK是一套完整的日志集中处理方案,ElasticSearch、Logstash和Kiabana三个开源工具组合使用,可以完成更强大的用户对日志的查询、排序、统计。
Elasticsearch:用于日志的存储和分析
Logstash:用于日志的收集
Kibana:用于查看日志
案例环境
🍎准备三台虚拟机,根据下图配置IP,关闭防火墙和Selinux。node1节点和node2节点分配4GB内存,Apache节点1GB内存。
🍎实现功能:
配置ELK日志分析群集。
使用Logstash收集日志。
使用Kibana查看分析日志。
在两个ELK节点上配置域名解析,通过本地/etc/hosts文件实现。
🍎Node1配置
[root@localhost ~]# hostnamectl set-hostname node1
[root@localhost ~]# bash
[root@node1 ~]# vim /etc/hosts
192.168.1.10 node1 //插入下列两行配置
192.168.1.20 node2
[root@node1 ~]# java -version //检查Java环境
openjdk version "1.8.0_102"
OpenJDK Runtime Environment (build 1.8.0_102-b14)
OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode)
🍎Node2配置
[root@localhost ~]# hostnamectl set-hostname node2
[root@localhost ~]# bash
[root@node2 ~]#
[root@node2 ~]# vim /etc/hosts
192.168.1.10 node1 //插入下列两行配置
192.168.1.20 node2
[root@node2 ~]# java -version //检查Java环境
openjdk version "1.8.0_102"
OpenJDK Runtime Environment (build 1.8.0_102-b14)
OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode)
部署Elasticsearch
🍓Node1和Node2节点都需要部署Elasticsearch软件,下面以Node1节点为例,Node2节点配置与Node1节点相同(下方配置文件中节点名字分别为node1和node2)。
安装Elasticsearch
[root@node1 ~]# mount /dev/cdrom /media
mount: /dev/sr0 is write-protected, mounting read-only
[root@node1 ~]# rpm -ivh /media/elasticsearch-5.5.0.rpm
warning: /media/elasticsearch-5.5.0.rpm: Header V4 RSA/SHA512 Signature, key ID d88e42b4: NOKEY
Preparing... ################################# [100%]
Creating elasticsearch group... OK
Creating elasticsearch user... OK
Updating / installing...
1:elasticsearch-0:5.5.0-1 ################################# [100%]
### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
### You can start elasticsearch service by executing
sudo systemctl start elasticsearch.service
🍓加载系统服务
[root@node1 ~]# systemctl daemon-reload
[root@node1 ~]# systemctl enable elasticsearch
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
更改主配置文件
🍒以下配置注意去除注释
[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml
cluster.name: my-elk-cluster //群集名字
node.name: node1 //节点名字(注意,节点2名字改为node2)
path.data: /data/elk_data //数据存放路径
path.logs: /var/log/elasticsearch/ //日志存放路径
bootstrap.memory_lock: false //在启动的时候不锁定内存
network.host: 0.0.0.0 //提供服务绑定的IP地址,0.0.0.0代表所有地址
http.port: 9200 //侦听端口
discovery.zen.ping.unicast.hosts: ["node1", "node2"] //群集发现通过单播实现
🍒创建数据存放路径并授权。
[root@node1 ~]# mkdir -p /data/elk_data
[root@node1 ~]# chown elasticsearch:elasticsearch /data/elk_data/
🍒启动并查看端口号
[root@node1 ~]# systemctl start elasticsearch.service
[root@node1 ~]# netstat -anpt | grep 9200 //启动后需要稍等一会(30秒)才能查到端口号
tcp6 0 0 :::9200 :::* LISTEN 4952/java
🍒配置完node1节点后,继续配置node2节点。注意修改主配置文件时,名字的区分。
查看节点信息
🍑在Node1上,打开浏览器输入http://192.168.1.10:9200,可以看到node1的信息。
🍑在Node2上,打开浏览器输入http://192.168.1.20:9200,可以看到node2的信息。
🍑通过浏览器输入http://192.168.1.10:9200/_cluster/health?pretty查看群集的健康情况,可以看到status值为green,表示节点健康运行。
🍑通过浏览器输入http://192.168.1.10:9200/_cluster/state?pretty查看群集的状态信息。
🍤通过上述方式查看群集状态对用户并不友好,可以通过安装Elasticsearch-head插件,更好地管理群集。
安装Elasticsearch-head插件
🌶️在node1节点安装即可。
安装Elasticsearch-head插件需要作为独立服进行安装,需要npm命令,需要提前安装node和phantomjs,node编译安装时间较久,大约40min,耐心等待。
编译安装node
[root@node1 ~]# tar zxf /media/node-v8.2.1.tar.gz -C /usr/src
[root@node1 ~]# cd /usr/src/node-v8.2.1/
[root@node1 node-v8.2.1]# ./configure && make && make install
安装phantomjs
[root@node1 node-v8.2.1]# tar jxf /media/phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/src
[root@node1 node-v8.2.1]# cd /usr/src/phantomjs-2.1.1-linux-x86_64/bin/
[root@node1 bin]# cp phantomjs /usr/local/bin/
安装Elasticsearch-head
[root@node1 node-v8.2.1]# tar jxf /media/phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/src
[root@node1 node-v8.2.1]# cd /usr/src/phantomjs-2.1.1-linux-x86_64/bin/
[root@node1 bin]# cp phantomjs /usr/local/bin/
[root@node1 bin]# tar zxf /media/elasticsearch-head.tar.gz -C /usr/src
[root@node1 bin]# cd /usr/src/elasticsearch-head/
[root@node1 elasticsearch-head]# npm install //安装依赖包
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.0.0 (node_modules/karma/node_modules/chokidar/node_modules/fsevents):
npm WARN network SKIPPING OPTIONAL DEPENDENCY: request to https://registry.npmjs.org/fsevents failed, reason: getaddrinfo ENOTFOUND registry.npmjs.org registry.npmjs.org:443
npm WARN elasticsearch-head@0.0.0 license should be a valid SPDX license expression
up to date in 3.826s
修改主配置文件
[root@node1 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml
http.cors.enabled: true //开启跨域访问支持,默认为false
http.cors.allow-origin: "*" //跨域访问允许的域名地址
[root@node1 elasticsearch-head]# systemctl restart elasticsearch
🌶️启动服务
🍤必须在解压后的elasticsearch-head目录下启动,进程会读取该目录下的gruntifile.js文件,否则会启动失败。
[root@node1 elasticsearch-head]# npm run start & //前台启动,一旦关闭中断,服务也将关闭
[1] 88586
[root@node1 elasticsearch-head]#
> elasticsearch-head@0.0.0 start /usr/src/elasticsearch-head
> grunt server
Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100 //输入回车键确认
🍤查看端口号,elasticsearch-head监听端口为9100
[root@node1 elasticsearch-head]# netstat -anpt | grep 9100
tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 88599/grunt
[root@node1 elasticsearch-head]# netstat -anpt | grep 9200
tcp6 0 0 :::9200 :::* LISTEN 88492/java
查看信息
🍉通过Elasticsearch-head查看Elasticsearch信息。浏览器访问http://192.168.1.10:9100连接群集,可以看到群集健康值为绿色。单击浏览数据,可以查看索引信息,此时索引为空。
插入索引
🍉通过命令插入一个测试索引,通过输出信息可以看到索引为index-demo,类型为test。
[root@node1 ~]# curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'Content-Type: application/json' -d '"user":"zhangsan","mesg":"hello world"'
🍉刷新浏览器,可以看到创建成功的索引。
🍉选择”Overview“选项卡,还可以看到索引默认被分片成5个,且在一个副本。
Logstash安装及使用方法
🍇logstash一般部署在需要监控其日志的服务器中,本次案例安装在apache服务器上,用于收集apache服务器的日志信息并发送到elasticsearch中。首先在Node1上部署logstash,安装logstash前也需要java环境。
安装logstash
🍇在node1安装即可。
[root@node1 ~]# mount /dev/cdrom /media
mount: /dev/sr0 is write-protected, mounting read-only
[root@node1 ~]# rpm -ivh /media/logstash-5.5.1.rpm
warning: /media/logstash-5.5.1.rpm: Header V4 RSA/SHA512 Signature, key ID d88e42b4: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:logstash-1:5.5.1-1 ################################# [100%]
Using provided startup.options file: /etc/logstash/startup.options
Successfully created system startup script for Logstash
[root@node1 ~]# systemctl start logstash
[root@node1 ~]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin
测试logstash
🍇命令行常用选项如下:
-f:通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash。
-e:后面紧跟着字符串,该字符串可以被当作logstash的配置(如果是“ ”,则默认使用stdin作为输入,stdout作为输出)。
-t:测试配置文件是否正确,然后退出。
🍇logstash命令使用方法如下:
[root@node1 ~]# logstash -e 'input stdin output stdout'
......//省略部分内容
The stdin plugin is now waiting for input:
13:41:27.401 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint :port=>9600
www.aaa.com //键盘输入内容
2022-08-05T05:41:35.419Z node1 www.aaa.com //输出的结果
www.bbb.com //键盘输入内容
2022-08-05T05:41:39.528Z node1 www.bbb.com //输出的结果
//按Ctrl+c退出
//使用rubydebug显示详细输出
[root@node1 ~]# logstash -e 'input stdin output stdout codec=>rubydebug '
The stdin plugin is now waiting for input:
13:44:57.024 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint :port=>9600
www.aaa.com //键盘输入内容
//下列输出的结果
"@timestamp" => 2022-08-05T05:45:19.182Z,
"@version" => "1",
"host" => "node1",
"message" => "www.aaa.com"
//使用logstash信息写入elasticsearch中
[root@node1 ~]# logstash -e 'input stdin output elasticsearch hosts=>["192.168.1.10:9200"]'
The stdin plugin is now waiting for input:
13:47:17.910 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint :port=>9600
www.aaa.com //键盘输入内容
www.bbb.com //键盘输入内容
www.ccc.com //键盘输入内容
//结果不在标准输出显示,而是发送至elasticsearch中
🍇在Elasticsearch中查看logstash新增的索引。
🍇查看索引对应的内容。
logstash配置文件
🥭logstash配置文件基本由三部分组成:input、output以及filter。因此标准的配置文件格式如下:
input ...
filter ...
output ...
🥭修改配置文件,让其收集系统日志/var/log/messages,并将其输出到elasticsearch中。
[root@node1 ~]# chmod o+r /var/log/messages
[root@node1 ~]# ll /var/log/messages
-rw----r--. 1 root root 654037 Aug 5 13:55 /var/log/messages
[root@node1 ~]# vim /etc/logstash/conf.d/system.conf
input
file
path => "/var/log/messages"
type => "system"
start_position => "beginning"
output
elasticsearch
hosts => ["192.168.1.10:9200"]
index => "system-%+YYYY.MM.dd"
🥭完成后,通过浏览器查看elasticsearch的信息。
🥭查看索引下的日志信息
安装kibana
🧀在node1服务器安装kibana,设置开机启动。
[root@node1 ~]# rpm -ivh /media/kibana-5.5.1-x86_64.rpm
warning: /media/kibana-5.5.1-x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID d88e42b4: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:kibana-5.5.1-1 ################################# [100%]
[root@node1 ~]# systemctl enable kibana
🧀设置kibana的主配置文件
[root@node1 ~]# vim /etc/kibana/kibana.yml
####下面配置删掉注释
server.port: 5601 //kibana端口号
server.host: "0.0.0.0" //kibana侦听的地址
elasticsearch.url: "http://192.168.1.10:9200" //和elasticsearch建立连接
kibana.index: ".kibana" //在elasticsearch中添加.kibana索引
🧀启动kibana服务
[root@node1 ~]# systemctl start kibana
🧀验证kibana,通过浏览器访问http://192.168.1.10:5601,第一次登录需要添加elasticsearch索引,添加前面创建的索引system-2022.08.05。
🧀查看索引默认字段
🧀单击查看“Discover”按钮查看图表信息及日志信息。
🧀可以分类显示,“Available Fields”中的“host”,然后单击“add”按钮后,可以看到按照“host”筛选后的结果。
Apache配置
🍤启动apache,并查看网页是否成功!将apache服务器的日志添加到elasticsearch并通过kibana显示。
[root@localhost ~]# systemctl restart httpd
🍤在apache服务器上安装logstash,以便将收集的日志发送到elasticsearch中。
[root@localhost ~]# java -version
openjdk version "1.8.0_102"
OpenJDK Runtime Environment (build 1.8.0_102-b14)
OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode)
[root@localhost ~]# eject
[root@localhost ~]# mount /dev/cdrom /media
mount: /dev/sr0 is write-protected, mounting read-only
[root@localhost ~]# rpm -ivh /media/logstash-5.5.1.rpm
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl enable logstash
🍤编写logstash配置文件。
[root@localhost ~]# cd /etc/logstash/conf.d/
[root@localhost conf.d]# vim apache_log.conf
input
file
path => "/etc/httpd/logs/access_log"
type => "access"
start_position => "beginning"
file
path => "/etc/httpd/logs/error_log"
type => "error"
start_position => "beginning"
output
if [type] == "access"
elasticsearch
hosts => ["192.168.1.10:9200"]
index => "apache_access-%+YYYY.MM.dd"
if [type] == "error"
elasticsearch
hosts => ["192.168.1.10:9200"]
index => "apache_error-%+YYYY.MM.dd"
[root@localhost conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf
//执行后不要强行暂停
🍤通过浏览器访问http://192.168.1.10:9100查看索引是否创建。
🍤登录kibana,单击“Create index Pattern”按钮添加索引。
🍤在索引名中输入之前配置的Output前缀“apache_error”,并单击“Create”按钮。
🍤相同方法添加“apache_access”
🍤选择“Discover”选项卡,在中间下拉列表中选择刚添加的"apache_access-*"索引,可以查看相应的图表及日志信息,还可以根据Fields进行归类显示。
🍤:哇,不是吧!真的有人看完了文章!看都看完了那不得点个赞再走吗。
以上是关于案例:ELK日志分析系统的主要内容,如果未能解决你的问题,请参考以下文章