ELK日志分析系统搭建
系统架构
【APPServer集群】→→【logstash Agent 采集器】→→【ElasticSearch Cluster】→→【Kibana Server】→→【Browser】
Logstash收集AppServer产生的Log,并存放到ElasticSearch集群中,而Kibana则从ES集群中查询数据生成图表,再返回给Browser。
二、环境信息
1、CentOS Linux release 7.9.2009 (Core)
2、ELK版本:v8.8.2
3、部署方式:docker部署
服务端:
Elasticsearch:https://172.16.102.19:9200/
Kibana:http://172.16.102.19:5601/
Logstash:172.16.102.19
客户端(日志收集目标端):
Filebeat: 172.16.102.16
Nginx测试:172.16.102.16/
平台访问
http://172.16.102.19:5601/ 账号:elastic 密码:sirun@2018
三、 部署步骤
3.1 基础环境部署
1、Selinux
2、主机网络
3、时间同步
4、 安装docker-ce并启动
yum install -y docker
systemctl start docker
systemctl enable docker
3.2 Elasticsearch部署
172.16.102.19节点上操作步骤
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.8.2
docker network create elastic
docker network ls | grep elastic
docker run -itd --name elastic --net elastic -p 9200:9200 -p 9300:9300 -e “discovery.type=single-node” docker.elastic.co/elasticsearch/elasticsearch:8.8.2
3.3 Kibana部署
172.16.102.19节点上操作步骤
docker pull docker.elastic.co/kibana/kibana:8.8.2
docker run -itd --name kibana --net elastic -p 5601:5601 docker.elastic.co/kibana/kibana:8.8.2
Kibana连接Elasticsearch
在elastic容器执行elasticsearch-create-enrollment-token命令,创建kibana连接Elasticsearch的enrollment-token
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d2693b94e701 docker.elastic.co/kibana/kibana:8.8.2 “/bin/tini – /usr…” 5 seconds ago Up 5 seconds 0.0.0.0:5601->5601/tcp kibana
5c4065492979 docker.elastic.co/elasticsearch/elasticsearch:8.8.2 “/bin/tini – /usr…” 25 minutes ago Up 25 minutes 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp elastic
docker exec -it elastic /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
WARNING: Owner of file [/usr/share/elasticsearch/config/users] used to be [root], but now is [elasticsearch]
WARNING: Owner of file [/usr/share/elasticsearch/config/users_roles] used to be [root], but now is [elasticsearch]
eyJ2ZXIiOiI4LjguMiIsImFkciI6WyIxNzIuMTguMC4yOjkyMDAiXSwiZmdyIjoiY2U3MGI2Yjk2N2ViNTMwMjVmOGZmY2VlMjIyYTY0Yjg0OGE2OTU4NGQzMjUzNjllODIwMGJmMzRiYzFiNjM1MCIsImtleSI6IjJSTlRMcE1CY3cxYlNQRHJSeF9nOjFIMDE2ekxJUnhTT015Z0ROZEVmNXcifQ==
访问宿主机服务器IP地址和kibana容器映射的端口http://192.168.80.50:5601/
在截图中页面输入上一步创建的enrollment-token,可以看到下面自动出现了连接到elasticsearch容器的信息https://172.18.0.2:9200
点击Configure Elastic
在kibana容器执行kibana-verification-code命令,生成verification-code
docker exec -it kibana /usr/share/kibana/bin/kibana-verification-code
在kibana页面输入code,点击Verify
开始Elastic的配置,等待几秒钟Kibana就可以配置完成
三、登录kibana,更改密码,设置中文语言
在容器elastic中执行重置密码命令,使用-u参数指定重置的用户名elastic,输入y继续,New value值为新的密码
]# docker exec -it elastic /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
kibana配置完成后,输入上一步获取的用户名、密码信息
用户名:elastic 密码:WTb5AVbYDOQl2EKoV7-d
登录成功,我们把用户elastic的密码改一个容易记的密码
如果喜欢中文页面,可以进入kibana容器设置中文语言
进入kibana容器
docker exec -it kibana bash
在kibana配置文件中添加中文语言设置
kibana@4d76d1aa8bc6:~$ echo “i18n.locale: zh-CN” >> config/kibana.yml
查看配置,可以看到中文语言设置已经添加到配置文件末尾,还可以看到kibana中配置的elasticsearch主机信息
kibana@4d76d1aa8bc6:~$ tail config/kibana.yml
退出容器,重启kibana容器
kibana@4d76d1aa8bc6:~$ exit
docker restart kibana
Logstash部署
可以在172.16.102.19节点上操作步骤或者是在客户端节点部署
docker pull docker.elastic.co/logstash/logstash:8.8.2
docker run -itd --name logstash docker.elastic.co/logstash/logstash:8.8.2
创建用于映射容器目录的宿主机目录
mkdir -p /usr/local/logstash
拷贝logstash容器文件到宿主机目录
docker cp logstash:/usr/share/logstash/config /usr/local/logstash/
docker cp logstash:/usr/share/logstash/pipeline /usr/local/logstash/
删除容器
docker rm -f logstash
重新创建logstash容器,并映射宿主机目录,映射5044端口接收filebeat日志,映射514端口接收syslog日志
docker run -itd --name logstash -p 5044:5044 -p 514:514 -v /usr/local/logstash/config:/usr/share/logstash/config -v /usr/local/logstash/pipeline:/usr/share/logstash/pipeline docker.elastic.co/logstash/logstash:8.8.2
接收filebeat日志
进入宿主机映射的logstash目录,目录下有config配置文件目录和pipeline配置文件目录
cd /usr/local/logstash/
[root@localhost logstash]# ll
total 0
drwxrwsr-x 2 root root 216 Apr 12 18:16 config
drwxr-sr-x 3 root root 22 Apr 12 14:40 pipeline
[root@localhost logstash]# cd config/
[root@localhost config]# ll
total 40
-rw-r–r-- 1 root root 1915 Apr 12 18:16 http_ca.crt
-rw-rw-r-- 1 root root 1833 Jun 21 2023 jvm.options
-rw-r–r-- 1 root root 7437 Jun 21 2023 log4j2.file.properties
-rw-r–r-- 1 root root 605 Jun 21 2023 log4j2.properties
-rw-rw-r-- 1 root root 342 Jun 21 2023 logstash-sample.conf
-rw-r–r-- 1 root root 93 Apr 12 15:18 logstash.yml
-rw-r–r-- 1 root root 420 Apr 12 14:41 pipelines.yml
-rw-r–r-- 1 root root 286 Apr 12 13:50 pipelines.yml.bak
-rw-rw-r-- 1 root root 1696 Jun 21 2023 startup.options
上述config目录文件中只需要调整pipelines.yml文件即可,其他文件保持不动
[root@localhost config]# cat pipelines.yml
This file is where you define your pipelines. You can define multiple.
For more information on multiple pipelines, see the documentation:
https://www.elastic.co/guide/en/logstash/current/multiple-pipelines.html
#- pipeline.id: syslog
path.config: “/usr/share/logstash/pipeline/syslog/logstash-syslog.conf”
- pipeline.id: filebeat
path.config: “/usr/share/logstash/pipeline/filebeat/logstash-filebeat.conf”
该目录会指定logstash调用的filebeat配置内容
查看宿主机的filebeat配置内容
[root@localhost filebeat]# pwd
/usr/local/logstash/pipeline/filebeat
对应容器内部的目录为:/usr/share/logstash/pipeline/filebeat
[root@localhost filebeat]# cat logstash-filebeat.conf
input {
beats {
port => 5044
}
}
output {
elasticsearch {
hosts => [“https://172.16.102.19:9200”]
index => “logstash-syslog-%{+YYYY.MM.dd}”
user => “elastic”
password => “sirun@2018”
#ssl => true
#cacert => “/usr/share/logstash/config/http_ca.crt”
ssl_verification_mode => none
}
}
[root@localhost filebeat]#
3.5 filebeat部署
下载对应版本的filebeat软件包,版本要和ELK的保持一致
filebeat-8.13.2-linux-x86_64.tar.gz,解压,到待收集日志的主机端
[root@zabbixserver opt]# cd filebeat-8.13.2-linux-x86_64
[root@zabbixserver filebeat-8.13.2-linux-x86_64]# ll
total 200136
drwxr-x— 3 root root 60 Apr 11 14:44 data
-rw-r–r-- 1 root root 3749426 Apr 2 18:05 fields.yml
-rwxr-xr-x 1 root root 167305304 Apr 2 18:14 filebeat
-rw-r–r-- 1 root root 183210 Apr 2 18:05 filebeat.reference.yml
-rw------- 1 root root 407 Apr 12 13:24 filebeat.yml
-rw------- 1 root root 8734 Apr 11 13:57 filebeat.yml.bak
drwxr-xr-x 4 root root 24 Apr 2 18:05 kibana
-rw-r–r-- 1 root root 13675 Apr 2 17:39 LICENSE.txt
drwxr-xr-x 71 root root 4096 Apr 2 18:05 module
drwxr-xr-x 2 root root 4096 Apr 2 18:05 modules.d
-rw------- 1 root root 13841186 Apr 15 12:00 nohup.out
-rw-r–r-- 1 root root 3042213 Apr 2 17:39 NOTICE.txt
-rw-r–r-- 1 root root 814 Apr 2 18:14 README.md
[root@zabbixserver filebeat-8.13.2-linux-x86_64]# cat filebeat.yml
filebeat.inputs:
- type: filestream
paths:- /usr/local/nginx/log/access.log* //这个目录是我们部署的测试nginx环境
fields_under_root: true
fields:
logtype: “nginx-access”
ignore_older: 72h
- /usr/local/nginx/log/access.log* //这个目录是我们部署的测试nginx环境
processors:
- add_host_metadata: ~
- drop_fields:
fields: [“host.hostname”, “host.os”, “host.architecture”, “host.id”, “host.mac”, “host.containerized”, “agent”, “ecs”, “input”]
output.logstash:
hosts: [“172.16.102.19:5044”]
[root@zabbixserver filebeat-8.13.2-linux-x86_64]# nohup ./filebeat -e -c filebeat.yml &
;
3.6 部署nginx测试源端
创建一个nginx应用服务,这里使用http://172.16.102.16/这个节点,用filebeat采集日志发送给logstash
打开浏览器,访问 http://172.16.102.16/:80
四、平台使用
登录Kibana平台,查看索引管理
这个【logstash-syslog-2024.11.15】索引名称对应logstash-filebeat.conf配置文件中的index内容,使用时间为后缀方便查询。
进入数据视图界面,创建数据视图
查看日志数据展示
命中数的来源是访问nginx的站点次数,比如我们每刷新nginx站点一次,正常日志显示平台会多一次命中数。
比如我在11月15日下午15:25分刷新一个nginx站点(即访问一次nginx站点),日志平台会出现一次访问日志记录
这个日志刷新几乎可以做到实时,可能会存在刷新延迟,一般都是秒级可以更新。
技术参考
https://blog.csdn.net/weixin_48244640/article/details/131522652
https://blog.csdn.net/weixin_48244640/article/details/131543692
https://blog.csdn.net/weixin_48244640/article/details/131596333