centos7 搭建elk日誌分析系統

一、環境準備

IP地址

作業系統

主機名

配置

節點規劃

192。168。200。201

Centos7-1511

elk1

記憶體2G

磁碟20G

主節點

192。168。200。202

elk2

資料節點

192。168。200。203

elk3

資料節點

軟體要求:

編號

軟體名

版本

說明

安裝位置

1

Java

1。8。0_282

基礎環境

elk1、elk2、elk3

2

GPG-KEY-elasticsearch

GPG-KEY-elasticsearch

key

elk1、elk2、elk3

3

elasticsearch

elasticsearch-6。0。0。rpm

elk1、elk2、elk3

4

kibana

kibana-6。0。0-x86_64。rpm

圖形化介面

elk1

5

logstash

logstash-6。0。0。rpm

日誌收集工具

elk2

6

filebeat

filebeat-6。0。0-x86_64。rpm

輕量級日誌收集工具

elk3

7

openssl-libs

openssl-libs-1。0。2k-21。el7_9。x86_64。rpm

nginx依賴

elk2

8

nginx

nginx-1。16。1-1。el7。ngx。x86_64。rpm

nginx,用來被收集日誌

elk2

所需要的軟體包,這裡均有提供。連結:https://pan。baidu。com/s/1-bUdPILswW1VPZDcIqo8Ew 提取碼:1234

1、修改主機名

三臺虛擬機器都要修改。

[root@localhost ~]# hostnamectl set-hostname elk2[root@localhost ~]# bash

2、修改hosts檔案

三臺虛擬機器都要修改hosts檔案

[root@elk2 ~]# vi /etc/hosts127。0。0。1 localhost localhost。localdomain localhost4 localhost4。localdomain4::1 localhost localhost。localdomain localhost6 localhost6。localdomain6192。168。200。201 elk1192。168。200。202 elk2192。168。200。203 elk3

3、安裝java

三臺虛擬機器都安裝java。

[root@elk2 ~]# yum install -y java[root@elk2 ~]# java -versionopenjdk version “1。8。0_282”OpenJDK Runtime Environment (build 1。8。0_282-b08)OpenJDK 64-Bit Server VM (build 25。282-b08, mixed mode)

二、安裝配置elasticsearch

1、分別在三臺虛擬機器上傳安裝包和key檔案

[root@elk2 ~]# lsanaconda-ks。cfg elasticsearch-6。0。0。rpm GPG-KEY-elasticsearch[root@elk2 ~]# rpm -ivh elasticsearch-6。0。0。rpm[root@elk1 ~]# vi /etc/elasticsearch/elasticsearch。yml# 叢集名字cluster。name: elk# 節點名字node。name: elk1# 是否為主節點node。master: true# 是否為資料節點node。data: false# 監控地址,也可以設定為0。0。0。0 監控所有network。host: 192。168。200。201# 叢集所有節點。discovery。zen。ping。unicast。hosts: [“elk1”, “elk2”,“elk3”][root@elk2 ~]# vim /etc/elasticsearch/elasticsearch。ymlcluster。name: elknode。name: elk2node。master: falsenode。data: truenetwork。host: 192。168。200。202discovery。zen。ping。unicast。hosts: [“elk1”, “elk2”,“elk3”][root@elk2 ~]# vim /etc/elasticsearch/elasticsearch。ymlcluster。name: elknode。name: elk2node。master: falsenode。data: truenetwork。host: 192。168。200。202discovery。zen。ping。unicast。hosts: [“elk1”, “elk2”,“elk3”]

2、啟動服務

[root@elk1 ~]# systemctl start elasticsearch[root@elk2 ~]# systemctl start elasticsearch[root@elk3 ~]# systemctl start elasticsearch# 檢查服務是否啟動,啟動過程稍微有點慢。[root@elk1 ~]# netstat -ntlpActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program nametcp 0 0 0。0。0。0:22 0。0。0。0:* LISTEN 1080/sshdtcp 0 0 127。0。0。1:25 0。0。0。0:* LISTEN 1386/mastertcp6 0 0 192。168。200。201:9200 :::* LISTEN 4539/javatcp6 0 0 192。168。200。201:9300 :::* LISTEN 4539/javatcp6 0 0 :::22 :::* LISTEN 1080/sshdtcp6 0 0 ::1:25 :::* LISTEN 1386/master

3、檢查服務狀態

檢查叢集狀態

# green代表健康。[root@elk1 ~]# curl ‘192。168。200。201:9200/_cluster/health?pretty’{“cluster_name” : “elk”,“status” : “green”,“timed_out” : false,“number_of_nodes” : 3,“number_of_data_nodes” : 2,“active_primary_shards” : 0,“active_shards” : 0,“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}

檢查叢集詳細資訊

[root@elk1 ~]# curl ‘192。168。200。201:9200/_cluster/state?pretty’    {“cluster_name” : “elk”,“compressed_size_in_bytes” : 334,“version” : 4,“state_uuid” : “L-v7jiJ3SL6AbRg1laPENQ”,“master_node” : “HGeX4rJfS8-NzhwlA-uotA”,“blocks” : { },“nodes” : {“RNpTzoH_SLueBb79j7f4JA” : {“name” : “elk3”,“ephemeral_id” : “z76uEoI9S7yDzCHl9dTzog”,“transport_address” : “192。168。200。203:9300”,“attributes” : { }},“74XRmeneRP-0N58dY36WlQ” : {“name” : “elk2”,“ephemeral_id” : “YxD4-WmBS-S4U5PcEdYbRQ”,“transport_address” : “192。168。200。202:9300”,“attributes” : { }},“HGeX4rJfS8-NzhwlA-uotA” : {“name” : “elk1”,“ephemeral_id” : “AQo50_u6T1-E9mqug5dhew”,“transport_address” : “192。168。200。201:9300”,“attributes” : { }}},“metadata” : {“cluster_uuid” : “h5fnIdkBTE2zxoBK0sAIAw”,“templates” : { },“indices” : { },“index-graveyard” : {“tombstones” : [ ]}},“routing_table” : {“indices” : { }},“routing_nodes” : {“unassigned” : [ ],“nodes” : {“RNpTzoH_SLueBb79j7f4JA” : [ ],“74XRmeneRP-0N58dY36WlQ” : [ ]}},“restore” : {“snapshots” : [ ]},“snapshot_deletions” : {“snapshot_deletions” : [ ]},“snapshots” : {“snapshots” : [ ]}}

瀏覽器中也可以檢視。

三、安裝kibana

kibana 是一個視覺化影象工具,安裝在主節點。

1、上傳kibana安裝包

[root@elk1 ~]# lsanaconda-ks。cfg GPG-KEY-elasticsearchelasticsearch-6。0。0。rpm kibana-6。0。0-x86_64。rpm

2、安裝kibana

[root@elk1 ~]# rpm -ivh kibana-6。0。0-x86_64。rpm

3、配置kibana

[root@elk1 ~]# vi /etc/kibana/kibana。ymlserver。port: 5601server。host: “192。168。200。201”elasticsearch。url: “http://192。168。200。201:9200”[root@elk1 ~]# systemctl start kibana# 使用netstat 命令檢視埠有5601代表服務啟動成功。[root@elk1 ~]# netstat -ntlpActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Addresstcp 0 0 0。0。0。0:22 0。0。0。0:*tcp 0 0 127。0。0。1:25 0。0。0。0:*tcp 0 0 127。0。0。1:5601 0。0。0。0:*tcp6 0 0 192。168。200。201:9200 :::*tcp6 0 0 192。168。200。201:9300 :::*tcp6 0 0 :::22 :::*tcp6 0 0 ::1:25 :::*

4、瀏覽器訪問驗證

centos7 搭建elk日誌分析系統

四、安裝logstash

在elk2節點安裝logstash。

1、上傳logstash安裝包

[root@elk2 ~]# lsanaconda-ks。cfg GPG-KEY-elasticsearchelasticsearch-6。0。0。rpm logstash-6。0。0。rpm

2、安裝logstash

[root@elk2 ~]# rpm -ivh logstash-6。0。0。rpm

3、配置logstash

#測試螢幕輸出日誌[root@elk2 ~]# vim /etc/logstash/conf。d/syslog。confinput {syslog {type => “system-syslog”port => 10514}}output {stdout {codec => rubydebug}}[root@elk2 ~]# vim /etc/rsyslog。conf# *。*表示所有日誌*。* @@192。168。200。202:10514# 測試#其他節點登入elk2節點[root@elk3 ~]# ssh 192。168。200。202[root@elk2 ~]# logstash ——path。settings /etc/logstash/ -f /etc/lstash/conf。d/syslog。confOpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=NSending Logstash‘s logs to /var/log/logstash which is now configured via log4j2。properties{“severity” => 6,“pid” => “6505”,“program” => “sshd”,“message” => “Accepted password for root from 192。168。200。203 port 36910 ssh2\n”,“type” => “system-syslog”,“priority” => 86,“logsource” => “elk2”,“@timestamp” => 2021-03-02T20:39:30。000Z,“@version” => “1”,“host” => “192。168。200。202”,“facility” => 10,“severity_label” => “Informational”,“timestamp” => “Mar 3 04:39:30”,“facility_label” => “security/authorization”}{“severity” => 6,“program” => “systemd”,“message” => “Started Session 40 of user root。\n”,“type” => “system-syslog”,“priority” => 30,“logsource” => “elk2”,“@timestamp” => 2021-03-02T20:39:30。000Z,“@version” => “1”,“host” => “192。168。200。202”,“facility” => 3,“severity_label” => “Informational”,“timestamp” => “Mar 3 04:39:30”,“facility_label” => “system”}{“severity” => 6,“program” => “systemd-logind”,“message” => “New session 40 of user root。\n”,“type” => “system-syslog”,“priority” => 38,“logsource” => “elk2”,“@timestamp” => 2021-03-02T20:39:30。000Z,“@version” => “1”,“host” => “192。168。200。202”,“facility” => 4,“severity_label” => “Informational”,“timestamp” => “Mar 3 04:39:30”,“facility_label” => “security/authorization”}

配置監控日誌

[root@elk2 ~]# vi /etc/logstash/conf。d/syslog。confinput {syslog {type => “system-syslog”port => 10514}}output {elasticsearch {hosts => [“192。168。200。201:9200”]index => “system-syslog-%{+YYYY。MM}”}}[root@elk2 ~]# vim /etc/logstash/logstash。ymlhttp。host: “192。168。200。202”# 更改檔案所屬使用者,因為檔案都是root使用者許可權,所以這裡需要給他改成logstash[root@elk2 ~]# chown -R logstash /var/lib/logstash/

4、啟動服務

[root@elk2 ~]# systemctl start logstash# 檢視埠 9600 10514root@elk2 ~]# netstat -ntlpActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program nametcp 0 0 0。0。0。0:22 0。0。0。0:* LISTEN 1079/sshdtcp 0 0 127。0。0。1:25 0。0。0。0:* LISTEN 1365/mastertcp6 0 0 192。168。200。202:9200 :::* LISTEN 3276/javatcp6 0 0 :::10514 :::* LISTEN 7213/javatcp6 0 0 192。168。200。202:9300 :::* LISTEN 3276/javatcp6 0 0 :::22 :::* LISTEN 1079/sshdtcp6 0 0 ::1:25 :::* LISTEN 1365/mastertcp6 0 0 192。168。200。202:9600 :::* LISTEN 7213/java

5、測試

[root@elk1 ~]# curl ’192。168。200。201:9200/_cat/indices?v‘health status index uuid pri rep docs。count docs。deleted store。size pri。store。sizegreen open system-syslog-2021。03 1I_0gNkmTY6ZDmW0S-bcrw 5 1 8 0 129。9kb 64。9kbgreen open 。kibana UX1n2rXOQ8yQ2-2IGeAOeg 1 1 2 0 15。1kb 7。5kb

centos7 搭建elk日誌分析系統

discover 遇到這個問題,更改時區即可。

centos7 搭建elk日誌分析系統

centos7 搭建elk日誌分析系統

即可。

centos7 搭建elk日誌分析系統

到這裡kibana索引logstash日誌就完成了。

五、logstash收集nginx日誌

1、安裝nginx

# 安裝依賴[root@elk2 ~]# rpm -ivh openssl-libs-1。0。2k-21。el7_9。x86_64。rpmPreparing。。。 ################################# [100%]file /usr/lib64/。libcrypto。so。10。hmac from install of openssl-libs-1:1。0。2k-21。el7_9。x86_64 conflicts with file from package openssl-libs-1:1。0。1e-42。el7。9。x86_64# 報錯,新增引數—force[root@elk2 ~]# rpm -ivh openssl-libs-1。0。2k-21。el7_9。x86_64。rpm ——forcePreparing。。。 ################################# [100%]Updating / installing。。。1:openssl-libs-1:1。0。2k-21。el7_9 ################################# [100%][root@elk2 ~]# rpm -ivh nginx-1。16。1-1。el7。ngx。x86_64。rpm

2、修改配置檔案

[root@elk2 ~]# vi /etc/logstash/conf。d/nginx。confinput {file {path => “/tmp/elk_access。log”start_position => “beginning”type => “nginx”}}filter {grok {match => { “message” => “%{IPORHOST:http_host} %{IPORHOST:clientip} - %{USERNAME:remote_user} \[%{HTTPDATE:timestamp}\] \”(?:%{WORD:http_verb} %{NOTSPACE:http_request}(?: HTTP/%{NUMBER:http_version})?|%{DATA:raw_http_request})\“ %{NUMBER:response} (?:%{NUMBER:bytes_read}|-) %{QS:referrer} %{QS:agent} %{QS:xforwardedfor} %{NUMBER:request_time:float}”}}geoip {source => “clientip”}}output {stdout { codec => rubydebug }elasticsearch {hosts => [“192。168。200。202:9200”]index => “nginx-test-%{+YYYY。MM。dd}”}}# 檢查配置檔案是否出錯[root@elk2 ~]# logstash ——path。settings /etc/logstash/ -f /etc/logstash/conf。d/nginx。conf ——config。test_and_exitSending Logstash’s logs to /var/log/logstash which is now configured via log4j2。propertiesConfiguration OK# 配置nginx[root@elk2 ~]# vi /etc/nginx/conf。d/elk。confserver {listen 80;server_name elk。com;location / {proxy_pass http://192。168。200。202:5601;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}access_log /tmp/elk_access。log main2;}# 配置日誌格式 ,新增以下內容[root@elk2 ~]# vim /etc/nginx/nginx。conf[root@elk2 ~]# nginx -tnginx: the configuration file /etc/nginx/nginx。conf syntax is oknginx: configuration file /etc/nginx/nginx。conf test is successful

3、驗證

# 重啟nginx[root@elk2 ~]# systemctl start nginx# 重啟logstash[root@elk2 ~]# systemctl restart logstash# 修改windows的hosts檔案新增以下內容,路徑:C:\Windows\System32\drivers\etc# windows的hosts檔案因為許可權問題不能直接修改,小技巧直接把hosts檔案複製到桌面,然後修改完成再複製回去即可。192。168。200。202 elk。com# 主節點curl以下看是否有日誌生成[root@elk1 ~]# curl ‘192。168。200。201:9200/_cat/indices?v’health status index uuid pri rep docs。count docs。deleted store。size pri。store。sizegreen open system-syslog-2021。03 1I_0gNkmTY6ZDmW0S-bcrw 5 1 3057 0 1。9mb 984kbgreen open nginx-test-2021。03。03 4B6LzN4PR3e4-dJsj7tZJg 5 1 3010 0 1。6mb 868。2kbgreen open 。kibana UX1n2rXOQ8yQ2-2IGeAOeg 1 1 2 0 15。1kb 7。5k

瀏覽器直接輸入elk。com即可進入kibana管理介面,按照之前的方法新增nginx*即可

centos7 搭建elk日誌分析系統

centos7 搭建elk日誌分析系統

六、Beats收集日誌

1、Beats介紹

Beats是一個輕量級的收集日誌工具。logstash太佔用系統配置。

centos7 搭建elk日誌分析系統

2、上傳filebeat

[root@elk3 ~]# lsanaconda-ks。cfg elasticsearch-6。0。0。rpm filebeat-6。0。0-x86_64。rpm

3、配置filebeat

[root@elk3 ~]# vim /etc/filebeat/filebeat。yml# enabled: falsepaths:- /var/log/elasticsearch/elk。logoutput。elasticsearch:# Array of hosts to connect to。hosts: [“192。168。200。201:9200”]

4、啟動服務,驗證

[root@elk3 ~]# systemctl start filebeat[root@elk3 ~]# ps -aux|grep filedbus 862 0。0 0。0 26716 1816 ? Ss Mar02 0:00 /bin/dbus-daemon ——system ——address=systemd: ——nofork ——nopidfile ——systemd-activationelastic+ 3536 0。4 71。2 3262792 1332232 ? Ssl 00:28 4:25 /bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+AlwaysPreTouch -server -Xss1m -Djava。awt。headless=true -Dfile。encoding=UTF-8 -Djna。nosys=true -XX:-OmitStackTraceInFastThrow -Dio。netty。noUnsafe=true -Dio。netty。noKeySetOptimization=true -Dio。netty。recycler。maxCapacityPerThread=0 -Dlog4j。shutdownHookEnabled=false -Dlog4j2。disable。jmx=true -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/lib/elasticsearch -Des。path。home=/usr/share/elasticsearch -Des。path。conf=/etc/elasticsearch -cp /usr/share/elasticsearch/lib/* org。elasticsearch。bootstrap。Elasticsearch -p /var/run/elasticsearch/elasticsearch。pid ——quietroot 6948 1。1 0。7 281024 14460 ? Ssl 18:40 0:00 /usr/share/filebeat/bin/filebeat -c /etc/filebeat/filebeat。yml -path。home /usr/share/filebeat -path。config /etc/filebeat -path。data /var/lib/filebeat -path。logs /var/log/filebeatroot 6955 0。0 0。0 112644 952 pts/1 S+ 18:40 0:00 grep ——color=auto file[root@elk1 ~]# curl ‘192。168。200。201:9200/_cat/indices?v’health status index uuid pri rep docs。count docs。deleted store。size pri。store。sizegreen open system-syslog-2021。03 1I_0gNkmTY6ZDmW0S-bcrw 5 1 7563 0 2。1mb 1mbgreen open nginx-test-2021。03。03 4B6LzN4PR3e4-dJsj7tZJg 5 1 7516 0 2。2mb 1mbgreen open 。kibana UX1n2rXOQ8yQ2-2IGeAOeg 1 1 3 0 27。1kb 13。5kbgreen open filebeat-6。0。0-2021。03。03 cCYmdKb6QOeMTn1ep9aMGg 3 1 1284 0 420。1kb 192。6kb

centos7 搭建elk日誌分析系統

遇到的問題:

1、執行這條命令顯示java問題。。

[root@elk2 ~]# logstash ——path。settings /etc/logstash/ -f /etc/logstash/conf。d/syslog。confOpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N# 解決方法[root@elk2 ~]# vim /etc/logstash/jvm。options-XX:-AssumeMP新增一條語句即可。