? 日誌主要包括系統日誌和應用程序日誌,運維和開發人員能夠經過日誌瞭解服務器中軟硬件的信息,檢查應用程序或系統的故障,瞭解故障出現的緣由,以便解決問題。分析日誌能夠更清楚的瞭解服務器的狀態和系統安全情況,從而能夠維護服務器穩定運行。java
? 可是日誌一般都是存儲在各自的服務器中。若是管理數十臺服務器, 查閱日誌須要依次登錄不一樣的服務器,查看過程就會很繁瑣從而致使工做效率低下。雖然可使用 rsyslog 服務將日誌彙總。可是統計一些日誌中的數據或者檢索也是很麻煩的,通常使用grep、awk、wc、sort等Linux命令來統計和檢索。若是對數量巨大的日誌進行統計檢索,人工的效率仍是十分低下。node
? 經過咱們對日誌進行收集、彙總到一塊兒,完整的日誌數據具備很是重要的做用:linux
? ELK實時日誌收集分析系統能夠完美的解決以上問題。ELK做爲一款開源軟件能夠無償使用,也有強大的團隊和社區對它實時更新。nginx
? ELK主要由ElasticSearch、Logstash和Kibana三個開源工具組成,還有其餘專門因爲收集數據的輕量型數據採集器Beats。web
Elasticsearch?:分佈式搜索引擎。具備高可伸縮、高可靠、易管理等特色。能夠用於全文檢索、結構化檢索和分析,並能將這三者結合起來。Elasticsearch 是用Java 基於 Lucene 開發,如今使用最廣的開源搜索引擎之一,Wikipedia 、StackOverflow、Github 等都基於它來構建本身的搜索引擎。數據庫
在elasticsearch中,全部節點的數據是均等的。bootstrap
Logstash?:數據收集處理引擎。支持動態的從各類數據源蒐集數據,並對數據進行過濾、分析、豐富、統一格式等操做,而後存儲以供後續使用。vim
Kibana?:可視化化平臺。它可以搜索、展現存儲在 Elasticsearch 中索引數據。使用它能夠很方便的用圖表、表格、地圖展現和分析數據。安全
Filebeat:輕量級數據收集引擎。相對於Logstash所佔用的系統資源來講,Filebeat 所佔用的系統資源幾乎是微乎及微。它是基於原先 Logstash-fowarder 的源碼改造出來。換句話說:Filebeat就是新版的 Logstash-fowarder,也會是 ELK Stack 在 Agent 的第一選擇。ruby
Elasticsearch、Logstash、Kibana、Filebeat安裝的版本號必須所有一致,否則會出現kibana沒法顯示web頁面。
ELK工做演示圖:
#自行下載jdk rpm -ivh jdk-8u144-linux-x64.rpm #或者 yum install java-1.8.0-openjdk* vim /etc/profile.d/java.sh export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64 export PATH=$JAVA_HOME/jre/bin:$PATH source /etc/profile.d/java.sh
vim /etc/yum.repo.d/ELK.repo [ELK] name=ELK-Elasticstack baseurl=https://mirrors.tuna.tsinghua.edu.cn/elasticstack/yum/elastic-6.x/ gpgcheck=0 enabled=1 #關閉selinux setenforce 0 sed -i.bak 's@^SELINUX=\(.*\)@SELINUX=disabled@p' /etc/selinux/config #關閉防火牆 #Centos7 systemctl disable firewalld systemctl stop firewalld #CentOS6 service iptables stop service iptables disable
yum install elasticsearsh # 修改系統配置文件屬性 # vim /etc/security/limits.conf elasticsearch soft memlock unlimited elasticsearch hard memlock unlimited elasticsearch soft nofile 65536 elasticsearch hard nofile 131072
# vim /etc/elasticsearch/elasticsearch.yml #集羣名稱 cluster.name: els #節點名稱 node.name: els-1 #數據存放路徑 path.data: /data/els_data #日誌存放路徑 path.logs: /data/log/els #鎖定jvm.options指定的內存,不交換swap內存 bootstrap.memory_lock: true #綁定IP地址 network.host: 172.16.1.49 #端口號 http.port: 9200 #配置集羣配置,填寫集羣節點,會自動發現節點 # discovery.zen.ping.unicast.hosts: ["host1", "host2"] # 集羣配置 只須要修改節點名,和綁定ip地址便可 # vim /etc/elasticsearch/jvm.options -Xms1g #指定佔用內存大小,兩個數字要一致 都是1g -Xmx1g
#建立elasticsearch數據庫目錄,而且修改屬主爲elasticsearch· mkdir /data/els_data mkdir /data/log/els chown -R elasticsearch.elasticsearch /data/els_data chown -R elasticsearch.elasticsearch /data/log/els
systemctl start elasticsearch # 啓動後自動關閉 #報錯 [1] bootstrap checks failed [1]: memory locking requested for elasticsearch process but memory is not locked #將配置文件中的 bootstrap.memory_lock: true 註釋掉,不使用;便可啓動成功
報錯
啓動成功後
訪問172.16.1.49:9200
Elasticsearch API
Kibana是node.js 編寫的,不須要java環境。直接安裝便可
yum install kibana # 版本號須要和Elasticsearch 相同
vim /etc/kibana/kibana.yml server.port: 5601 server.host: "172.16.1.50" elasticsearch.url: "http://172.16.1.49:9200" kibana.index: ".kibana" logging.dest: /data/log/kibana/kibana.log # 配置kibana日誌輸出到哪裏 # 建立日誌目錄文件 mkdir -p /data/log/kibana/ touch /data/log/kibana/kibana.log chmod o+rw /data/log/kibana/kibana.log
訪問172.16.1.50:5601
出現 Kibana server is not ready yet
說明kibana與Elasticsearch版本號不一致
# 查看版本號 rpm -qa elasticsearch kibana
若是版本號如出一轍,那就多刷新幾回頁面吧。。。。
啓動成功後,訪問頁面能夠看到:
配置與Elasticsearch相同的Java環境,版本爲8以上的Java環境。
yum install logstash-"Version"
http.host: "172.16.1.229" http.port: 9600-9700
log_format main '{"@timestamp":"$time_iso8601",' '"host":"$server_addr",' '"clientip":"$remote_addr",' '"request":"$request",' '"size":$body_bytes_sent,' '"responsetime":$request_time,' '"upstreamtime":"$upstream_response_time",' '"upstreamhost":"$upstream_addr",' '"http_host":"$host",' '"url":"$uri",' '"referer":"$http_referer",' '"agent":"$http_user_agent",' '"status":"$status"}'; access_log /var/log/nginx/access_test.log main;
input { file { type =>"nginx-log" path => ["/var/log/nginx/access.log"] start_position => "beginning" sincedb_path => "/dev/null" } } output { elasticsearch { hosts => ["172.16.1.49:9200"] index => "nginx-log-%{+YYYY.MM}" } }
cd /usr/share/logstash/bin ./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/nginx.conf --config.test_and_exit OpenJDK 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 Sending Logstash logs to /var/log/logstash which is now configured via log4j2.properties [2019-02-20T17:34:29,949][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified Configuration OK # 配置文件OK 可使用 [2019-02-20T17:34:39,048][INFO ][logstash.runner ] Using config.test_and_exit mode. Config Validation Result: OK. Exiting Logstash
WARN報錯不影響運行
直接使用命令
./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/nginx.conf
就能夠直接運行logstash
? Logstash的數據都是從Beats中獲取,Logstash已經不須要本身去數據源中獲取數據了。
? 之前咱們使用的日誌採集工具是logstash,可是logstash佔用的資源比較大,沒有beats輕量,因此官方也推薦使用beats來做爲日誌採集工具。並且beats可擴展,支持自定義構建。
yum install filebeat-6.6.0
vim /etc/filebeat/filebeat.yml - type: log paths: - /Log_File #/var/log/messages #output.elasticsearch: #註釋掉輸出到elasticsearch的配置 # hosts: ["localhost:9200"] output.console: #添加輸出到當前終端的配置 enable: true
/usr/share/filebeat/bin/filebeat -c /etc/filebeat/filebeat.yml #運行filebeat,能夠看見日誌輸出在當前終端
- type: log paths: - /Log_File #/var/log/messages output.elasticsearch: #註釋掉輸出到elasticsearch的配置 hosts: ["172.16.1.49:9200"]
啓動 filebeat
systemctl start filebeat
運行
curl ‘172.16.1.49:9200/_cat/indices?v‘
,查看日誌索引
便可查看到日誌
#------------------- Logstash output ---------------------- output.logstash: #將輸出到elasticsearch的配置註釋 # The Logstash hosts hosts: ["172.16.1.229:5044"] # Optional SSL. By default is off. # List of root certificates for HTTPS server verifications #ssl.certificate_authorities: ["/etc/pki/root/ca.pem"] # Certificate for SSL client authentication #ssl.certificate: "/etc/pki/client/cert.pem" # Client Certificate Key #ssl.key: "/etc/pki/client/cert.key"
vim /etc/logstash/conf.d/test.conf input { beats { port =>5044 } } #filter{} #過濾器,自定義過濾日誌中的一些數據 output { stdout { codec => rubydebug } elasticsearch { hosts => "172.16.1.49:9200" index => "test-log-%{+YYYY.MM.dd}" } }
Elasticsearch上已經有了日誌索引,在kibana上也能夠查看到
yellow 表示沒有副本節點可用,由於測試時沒有搭建兩臺Elasticsearch
能夠用filebeat監控個自定義文件,手動插入數據。