ELK日志分析系统搭建
1.规范节点
节点规划见表1。
表1节点规划
IP | 主机名 | 节点 |
---|---|---|
100.100.0.21 | elk-1 | Elasticsearch/Kibana |
100.100.0.226 | elk-2 | Elasticsearch/Logstash |
100.100.0.204 | elk-3 | Elasticsearch |
2.基础准备
根据云平台所分配三台 CentOS 7.9 系统云主机和一台带有图形化页面云主机。使用所分配的云主机作为本次案例的实验节点。
案例实施
3.基础环境配置
hostname....忽略
[root@elk-1 ~]# cat /etc/yum.repos.d/http.repo #elk-2,elk-3同样配置 [centos] name=centos gpgcheck=0 enable=yes baseurl=http://192.168.95.171/yum-centos7/ [root@elk-1 ~]# yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel #三台主机安装 JDK 环境(以第一台节点为例)
4.部署 Elasticserach
[root@elk-1 ~]# curl -O http://192.168.95.171/openstack/elasticsearch-6.0.0.rpm [root@elk-1 ~]# rpm -ivh elasticsearch-6.0.0.rpm #配置elasticsearch 的配置文件,配置文件在/etc/elasticsearch/elasticsearch.yml cat /etc/elasticsearch/elasticsearch.yml [root@elk-1 ~]# vi /etc/elasticsearch/elasticsearch.yml cluster.name: ELK #取消注释,配置 elasticsearch 集群名称 node.name: elk-1 #配置节点名,默认随机指定一个 name 列表中名字,该列表在 Elasticserach 的 jar 包中 config 文件夹里 name.txt 文件中 node.master: true #添加指定该节点是否有资格被选举成为 node node.data: false #添加指定该节点是否有资格被选举成为 node,Elasticserach 是默认集群中的第一台机器为 master,如果这台机挂了就会重新选举 master,其他两节点为 false。 network.host: 172.128.11.10 #设置绑定的 ip 地址,可以是 ipv4 或 ipv6 的,默认为 0.0.0.0。 http.port: 9200 #启动的 Elasticserach 对外访问的 http 端口,默认 9200 discovery.zen.ping.unicast.hosts: ["elk-1","elk-2","elk-3"] #设置集群中 master 节点的初始列表,可以通过这些节点来自动发现新加入集群的节点。 [root@elk-1 ~]# systemctl enable elasticsearch --now [root@elk-2 ~]# systemctl enable elasticsearch --now [root@elk-3 ~]# systemctl enable elasticsearch --now [root@elk-1 ~]# ss -lntup | grep java tcp LISTEN 0 128 [::ffff:100.100.0.21]:9200 [::]:* users:(("java",pid=16408,fd=168)) tcp LISTEN 0 128 [::ffff:100.100.0.21]:9300 [::]:* users:(("java",pid=16408,fd=142)) [root@elk-2 ~]# ss -lntup | grep java tcp LISTEN 0 128 [::ffff:100.100.0.204]:9200 [::]:* users:(("java",pid=16485,fd=191)) tcp LISTEN 0 128 [::ffff:100.100.0.204]:9300 [::]:* users:(("java",pid=16485,fd=142)) [root@elk-3 ~]# ss -lntup | grep java tcp LISTEN 0 128 [::ffff:100.100.0.226]:9200 [::]:* users:(("java",pid=16458,fd=215)) tcp LISTEN 0 128 [::ffff:100.100.0.226]:9300 [::]:* users:(("java",pid=16458,fd=142)) ##检查集群状态 [root@elk-1 ~]# curl '100.100.0.21:9200/_cluster/health?pretty' { "cluster_name" : "ELK", ##集群名称 "status" : "green", ##集群健康状态,green 为健康,yellow 或者 red 则是集群有问题 "timed_out" : false, ##是否超时 "number_of_nodes" : 3, ##集群中节点数 "number_of_data_nodes" : 2, ##集群中 data 节点数量 "active_primary_shards" : 6, "active_shards" : 12, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 0, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0, "task_max_waiting_in_queue_millis" : 0, "active_shards_percent_as_number" : 100.0 }
5.部署kibana
第一台elk-1安装
[root@elk-1 ~]# curl -O http://192.168.95.171/openstack/kibana-6.0.0-x86_64.rpm [root@elk-1 ~]# rpm -ivh kibana-6.0.0-x86_64.rpm warning: kibana-6.0.0-x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID d88e42b4: NOKEY Preparing... ################################# [100%] Updating / installing... 1:kibana-6.0.0-1 ################################# [100%] [root@elk-1 ~]# cat /etc/kibana/kibana.yml |grep -v ^# server.port: 5601 server.host: 100.100.0.21 elasticsearch.url: "http://100.100.0.21:9200" [root@elk-1 ~]# systemctl enable kibana --now [root@elk-1 ~]# ss -lntup | grep node tcp LISTEN 0 128 100.100.0.21:5601 *:* users:(("node",pid=16597,fd=10))
启动后如果有进程或者能够发现 5601 端口暴露则服务启动成功,并可以通过浏览器访问地址 http://172.17.1.104:5601/,能够看到如图 1 所示的页面。
6.部署logstash
第二台elk-2安装
[root@elk-2 ~]# curl -O http://192.168.95.171/openstack/logstash-6.0.0.rpm [root@elk-3 ~]# rpm -ivh logstash-6.0.0.rpm warning: logstash-6.0.0.rpm: Header V4 RSA/SHA512 Signature, key ID d88e42b4: NOKEY Preparing... ################################# [100%] Updating / installing... 1:logstash-1:6.0.0-1 ################################# [100%] Using provided startup.options file: /etc/logstash/startup.options Successfully created system startup script for Logstash [root@elk-2 ~]# vi /etc/logstash/logstash.yml http.host: "100.100.0.204" //第二台主机名称 [root@elk-2 ~]# cat /etc/logstash/conf.d/syslog.conf input { file { path => "/var/log/messages" type => "systemlog" start_position => "beginning" stat_interval => "3" } } output { if [type] == "systemlog" { elasticsearch { hosts => "100.100.0.21:9200" ##elk-1主机ip index => "system-log-%{+YYYY.MM.dd}" } } } [root@elk-2 ~]# chmod 644 /var/log/messages [root@elk-2 ~]# chown -R logstash /var/lib/logstash/ [root@elk-2 ~]# ln -s /usr/share/logstash/bin/logstash /usr/bin [root@elk-2 ~]# logstash --path.settings /etc/logstash -f /etc/logstash/conf.d/syslog.conf --config.test_and_exit Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.prop erties Configuration OK //结果显示 OK 则证明没问题 参数说明: ● --path.settings 用于指定 logstash 的配置文件所在的目录。 ● -f 指定需要被检测的配置文件的路径。 ● --config.test_and_exit 指定检测完之后就退出,不然就会直接启动了。 [root@elk-2 ~]# systemctl enable logstash --now [root@elk-2 ~]# ss -lntup | grep 9600 tcp LISTEN 0 50 [::ffff:100.100.0.204]:9600 [::]:* users:(("java",pid=16889,fd=20))
7.Kibana检索日志
[root@elk-1 ~]# curl '100.100.0.204:9200/_cat/indices?v' health status index uuid pri rep docs.count docs.deleted store.size pri.store.size green open .kibana SMIUXAT_SDKEgkjHCnJUFw 1 1 2 0 14.1kb 7kb green open system-log-2023.04.29 DV32WoeYQtaIOVYFQfOhYA 5 1 1371 0 1.1mb 576.3kb [root@elk-1 ~]# curl '100.100.0.204:9200/system-log-2023.04.29?pretty' { "system-log-2023.04.29" : { "aliases" : { }, "mappings" : { "systemlog" : { "properties" : { "@timestamp" : { "type" : "date" }, "@version" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }, "host" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256
##
Web 页面配置
浏览器访问 172.17.1.104:5601,到 kibana 上配置,索引的目录为:system-log-2023.04.29,修改完成后点击“Create”按钮,如图 2 所示。