使用Logstash和Kibana在CentOS 7上集中日誌記錄
集中日誌記錄在嘗試識別伺服器或應用程式的問題時非常有用,因為它允許您在單個位置搜尋所有日誌。它也很有用,因為它允許您通過在特定時間範圍內關聯其日誌來識別跨多個伺服器的問題。本系列教程將教您如何在CentOS上安裝Logstash和Kibana,然後如何添加更多過濾器來構造您的日誌資料。
http://www.ibm.com/developerworks/cn/opensource/os-cn-elk/ 安裝介紹
在本教程中,我們將在CentOS 7上安裝Elasticsearch ELK Stack,即Elasticsearch 5. x,Logstash 5. x和Kibana 5. x。我們還將向您展示如何配置它,以使用Filebeat 1.在一個集中的位置收集和可視化您的系統的系統日誌。 Logstash是一個用於收集,解析和儲存日誌以供將來使用的開源工具。 Kibana是一個Web介面,可用於搜尋和查看Logstash索引的日誌。這兩個工具都基於Elasticsearch,用於儲存日誌。
集中日誌記錄在嘗試識別伺服器或應用程式的問題時非常有用,因為它允許您在單個位置搜尋所有日誌。它也很有用,因為它允許您通過在特定時間範圍內關聯其日誌來識別跨多個伺服器的問題。
可以使用Logstash收集所有類型的日誌,但我們將本教程的範圍限制為syslog收集。 實驗目的
本教程的目標是設定Logstash以收集多個伺服器的syslog,並設定Kibana以可視化收集的日誌。
ELK堆棧設定有四個主要組件: Logstash:處理傳入日誌的Logstash的伺服器組件 Elasticsearch:儲存所有日誌 Kibana:用於搜尋和可視化日誌的Web介面,將通過Nginx Filebeat代理:安裝在將其日誌發送到Logstash的用戶端伺服器,Filebeat充當記錄傳送代理,利用伐木工具網路通訊協定與Logstash進行通訊
我們將在單個伺服器上安裝前三個組件,我們將其稱為我們的ELK伺服器。 Filebeat將安裝在我們要收集日誌的所有用戶端伺服器上,我們將統稱為用戶端伺服器。 先決條件
您的ELK伺服器將需要的CPU,RAM和儲存量取決於您要收集的日誌的卷。在本教程中,我們將使用具有以下規格的VPS用於我們的ELK伺服器: OS: CentOS 7 RAM: 4GB CPU: 2
註:根據自己的伺服器資源分派各個節點的資源 安裝 Java 8
Elasticsearch和Logstash需要Java,所以我們現在就安裝它。我們將安裝最新版本的Oracle Java 8,因為這是Elasticsearch推薦的版本。
註:建議本地下載完最新版的JDK,然後上傳到伺服器的/usr/local/src目錄
# JDK下載地址:http://www.oracle.com/technetwork/java/javase/downloads
然後使用此yum命令安裝RPM(如果您下載了不同的版本,請在此處替換檔案名稱):
yum -y localinstall jdk-8u111-linux-x64.rpm# orrpm -ivh jdk-8u111-linux-x64.rpm
現在Java應該安裝在/usr/java/jdk1.8.0_111/jre/bin/java,並從/usr/bin/java 連結。 安裝 Elasticsearch
Elasticsearch可以通過添加Elastic的軟體包倉庫與軟體包管理器一起安裝。
運行以下命令將Elasticsearch公用GPG密鑰匯入rpm:
# https://www.elastic.co/guide/en/elasticsearch/reference/current/rpm.htmlrpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
在基於RedHat的發行版的/etc/yum.repos.d/目錄中建立一個名為elasticsearch.repo的檔案,其中包括:
echo '[elasticsearch-5.x]name=Elasticsearch repository for 5.x packagesbaseurl=https://artifacts.elastic.co/packages/5.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearchenabled=1autorefresh=1type=rpm-md' | sudo tee /etc/yum.repos.d/elasticsearch.repo
Elasticsearch 源建立完成之後,通過makecache查看源是否可用,然後通過yum安裝Elasticsearch :
yum makecacheyum install elasticsearch -y
要將Elasticsearch配置為在系統引導時自動啟動,請運行以下命令:
sudo /bin/systemctl daemon-reloadsudo /bin/systemctl enable elasticsearch.service
Elasticsearch可以按如下方式啟動和停止:
sudo systemctl start elasticsearch.servicesudo systemctl stop elasticsearch.service
這些命令不會提供有關Elasticsearch是否已成功啟動的反饋。相反,此資訊將寫入位於/ var / log / elasticsearch /中的記錄檔中。
預設情況下,Elasticsearch服務不會記錄systemd日誌中的資訊。要啟用journalctl日誌記錄,必須從elasticsearch中的ExecStart命令列中刪除–quiet選項。服務檔案。
# 注釋24行的 --quiet \vim /etc/systemd/system/multi-user.target.wants/elasticsearch.service
當啟用systemd日誌記錄時,使用journalctl命令可以獲得日誌記錄資訊: 使用tail查看journal:
sudo journalctl -f
要列出elasticsearch服務的日誌項目:
sudo journalctl --unit elasticsearch
要從給定時間開始列出elasticsearch服務的日誌項目:
sudo journalctl --unit elasticsearch --since "2017-1-4 10:17:16"# since 表示指定時間之前的記錄
使用man journalctl 查看journalctl 更多使用方法 檢查Elasticsearch是否正在運行
您可以通過向localhost上的連接埠9200發送HTTP請求來測試Elasticsearch節點是否正在運行:
curl -XGET 'localhost:9200/?pretty'
我們能得到下面這樣的回顯:
{ "name" : "De-LRNO", "cluster_name" : "elasticsearch", "cluster_uuid" : "DeJzplWhQQK5uGitXr8jjA", "version" : { "number" : "5.1.1", "build_hash" : "5395e21", "build_date" : "2016-12-06T12:36:15.409Z", "build_snapshot" : false, "lucene_version" : "6.3.0" }, "tagline" : "You Know, for Search"}
配置 Elasticsearch
Elasticsearch 從預設的/etc/elasticsearch/elasticsearch.yml載入設定檔,
設定檔的格式考:
https://www.elastic.co/guide/en/elasticsearch/reference/current/settings.html
[root@linuxprobe ~]# egrep -v "^#|^$" /etc/elasticsearch/elasticsearch.yml [root@linuxprobe ~]# egrep -v "^#|^$" /etc/elasticsearch/elasticsearch.ymlnode.name: node-1path.data: /var/lib/elasticsearchpath.logs: /var/log/elasticsearchnetwork.host: 10.1.1.53 # 預設localhost,自訂為iphttp.port: 9200
RPM還具有系統設定檔(/etc/sysconfig/elasticsearch),允許您設定以下參數:
[root@linuxprobe elasticsearch]# egrep -v "^#|^$" /etc/sysconfig/elasticsearch ES_HOME=/usr/share/elasticsearchJAVA_HOME=/usr/java/jdk1.8.0_111CONF_DIR=/etc/elasticsearchDATA_DIR=/var/lib/elasticsearchLOG_DIR=/var/log/elasticsearchPID_DIR=/var/run/elasticsearch
日誌配置
Elasticsearch使用Log4j 2進行日誌記錄。 Log4j 2可以使用log4j2配置。屬性檔案。 Elasticsearch公開單個屬性$ {sys:es。日誌},可以在設定檔中引用以確定記錄檔的位置;這將在運行時解析為Elasticsearch記錄檔的首碼。
例如,如果您的日誌目錄是/var/log/elasticsearch並且您的叢集名為production,那麼$ {sys:es。 logs}將解析為/var/log/elasticsearch/production。
預設日誌配置存在:/etc/elasticsearch/log4j2.properties 安裝 Kibana
Kibana的RPM可以從ELK官網或從RPM存放庫下載。它可用於在任何基於RPM的系統(如OpenSuSE,SLES,Centos,Red Hat和Oracle Enterprise)上安裝Kibana。 匯入Elastic PGP Key
我們使用彈性簽名密鑰(PGP密鑰D88E42B4,可從https://pgp.mit.edu)簽名所有的包,指紋:
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
建立kibana源
echo '[kibana-5.x]name=Kibana repository for 5.x packagesbaseurl=https://artifacts.elastic.co/packages/5.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearchenabled=1autorefresh=1type=rpm-md' | sudo tee /etc/yum.repos.d/kibana.repo
kibana源建立成功之後,makecache後使用yum安裝kibana:
yum makecache && yum install kibana -y
使用systemd運行Kibana
要將Kibana配置為在系統引導時自動啟動,請運行以下命令:
sudo /bin/systemctl daemon-reloadsudo /bin/systemctl enable kibana.service
Kibana可以如下啟動和停止
sudo systemctl start kibana.servicesudo systemctl stop kibana.service
配置Kibana
Kibana預設從/etc/kibana/kibana.yml檔案載入其配置。
參考:https://www.elastic.co/guide/en/kibana/current/settings.html
注意:本實驗教程把localhost都改成伺服器IP,如果不更改localhost,需要設定反向 Proxy才能訪問到kibana。
在同一伺服器上安裝一個Nginx反向 Proxy,以允許外部存取。 安裝nginx
配置Kibana在localhost上監聽,必須設定一個反向 Proxy,允許外部存取它。本文使用Nginx來實現發向代理。 建立nginx官方源來安裝nginx
# https://www.nginx.com/resources/wiki/start/topics/tutorials/install/echo '[nginx]name=nginx repobaseurl=http://nginx.org/packages/centos/$releasever/$basearch/gpgcheck=0enabled=1' | sudo tee /etc/yum.repos.d/nginx.repo
使用yum安裝nginx和httpd-tools
yum install nginx httpd-tools -y
使用htpasswd建立一個名為“kibanaadmin”的管理使用者(可以使用其他名稱),該使用者可以訪問Kibana Web介面:
[root@linuxprobe ~]# htpasswd -c /etc/nginx/htpasswd.users kibanaadminNew password: # 自訂Re-type new password: Adding password for user kibanaadmin
使用vim配置nginx設定檔
[root@linuxprobe ~]# egrep -v "#|^$" /etc/nginx/conf.d/kibana.conf server { listen 80; server_name kibana.aniu.co; access_log /var/log/nginx/kibana.aniu.co.access.log main; error_log /var/log/nginx/kibana.aniu.co.access.log; auth_basic "Restricted Access"; auth_basic_user_file /etc/nginx/htpasswd.users; location / { proxy_pass http://localhost:5601; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; }}
儲存並退出。這將配置Nginx將您的伺服器的HTTP流量定向到在本地主機5601上偵聽的Kibana應用程式。此外,Nginx將使用我們之前建立的htpasswd.users檔案,並需要基本驗證。
# 啟動nginx並驗證配置sudo systemctl start nginxsudo systemctl enable nginx
SELinux已禁用。如果不是這樣,您可能需要運行以下命令使Kibana正常工作:
sudo setsebool -P httpd_can_network_connect 1 訪問kibana,輸入上面設定的kibanaadmin, password
上圖可以看出kibana已經安裝成功,需要配置一個 索引模式 安裝Logstash
建立Logstash源
# 匯入公用簽名密鑰rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch# 將以下內容添加到具有.repo尾碼的檔案中的/etc/yum.repos.d/目錄中,如logstash.repoecho '[logstash-5.x]name=Elastic repository for 5.x packagesbaseurl=https://artifacts.elastic.co/packages/5.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearchenabled=1autorefresh=1type=rpm-md' | sudo tee /etc/yum.repos.d/logstash.repo
使用yum安裝logstash
yum makecache && yum install logstash -y
產生SSL認證
由於我們將使用Filebeat將日誌從我們的用戶端伺服器發送到我們的ELK伺服器,我們需要建立一個SSL認證和金鑰組。 Filebeat使用該認證來驗證ELK Server的身份。使用以下命令建立將儲存認證和私密金鑰的目錄:
使用以下命令(在ELK伺服器的FQDN中替換)在適當的位置(/etc/pki/tls/ …)中產生SSL認證和私密金鑰:
cd /etc/pki/tlssudo openssl req -subj '/CN=ELK_server_fqdn/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt# 註:ELK_server_fqdn自訂,樣本如下:[root@linuxprobe ~]# cd /etc/pki/tls[root@linuxprobe tls]# sudo openssl req -subj '/CN=kibana.aniu.co/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crtGenerating a 2048 bit RSA private key.+++...........................................................................................................+++writing new private key to 'private/logstash-forwarder.key'-----
logstash-forwarder.crt檔案將被複製到,所有將日誌發送到Logstash的伺服器 配置Logstash
Logstash設定檔為JSON格式,駐留在/etc/logstash/conf.d中。該配置由三個部分組成:輸入,過濾和輸出。
建立一個名為01-beats-input.conf的設定檔,並設定我們的“filebeat”輸入:
sudo vi /etc/logstash/conf.d/01-beats-input.conf
插入以下輸入配置
input { beats { port => 5044 ssl => true ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt" ssl_key => "/etc/pki/tls/private/logstash-forwarder.key" }}
儲存退出,監聽TCP 5044連接埠上beats 輸入,使用上面建立的SSL認證加密
建立一個名為10-syslog-filter.conf的設定檔,我們將為syslog訊息添加一個過濾器:
sudo vim /etc/logstash/conf.d/10-syslog-filter.conf
插入以下輸入配置
filter { if [type] == "syslog" { grok { match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" } add_field => [ "received_at", "%{@timestamp}" ] add_field => [ "received_from", "%{host}" ] } syslog_pri { } date { match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] } }}
save和quit。此過濾器尋找標記為“syslog”類型(由Filebeat)的日誌,並且將嘗試使用grok解析傳入的syslog日誌,以使其結構化和可查詢。 建立一個名為logstash-simple的設定檔,樣本檔案:
vim /etc/logstash/conf.d/logstash-simple.conf
插入以下輸入配置
input { stdin { } }output { elasticsearch { hosts => ["localhost:9200"] } stdout { codec => rubydebug }}
這個輸出基本上配置Logstash來儲存input資料到Elasticsearch中,運行在localhost:9200 運行Logstash使用Systemd
sudo systemctl start logstash.servicesudo systemctl enable logstash.service
註: 到這裡可能會出現Logstash重啟失敗,等問題,查看日誌,鎖定具體問題,一般不會出錯 載入Kibana儀表板
Elastic提供了幾個範例Kibana儀表板和Beats索引模式,可以協助我們開始使用Kibana。雖然我們不會在本教程中使用儀表板,我們仍將載入它們,以便我們可以使用它包括的Filebeat索引模式。
首先,將樣本儀表板歸檔下載到您的主目錄:
cd /usr/local/srccurl -L -O https://download.elastic.co/beats/dashboards/beats-dashboards-1.1.0.zip
安裝unzip包,解壓beats
sudo yum -y install unzipunzip beats-dashboards-*.zip./load.sh
這些是我們剛載入的索引模式: [packetbeat-]YYYY.MM.DD [topbeat-]YYYY.MM.DD [filebeat-]YYYY.MM.DD [winlogbeat-]YYYY.MM.DD
我們開始使用Kibana時,我們將選擇Filebeat索引模式作為預設值。 在Elasticsearch中載入Filebeat索引模板
因為我們計劃使用Filebeat將日誌發送到Elasticsearch,我們應該載入Filebeat索引模板。索引模板將配置Elasticsearch以智能方式分析傳入的Filebeat欄位。
首先,將Filebeat索引模板下載到您的主目錄:
cd /usr/local/srccurl -O https://gist.githubusercontent.com/thisismitch/3429023e8438cc25b86c/raw/d8c479e2a1adcea8b1fe86570e42abab0f10f364/filebeat-index-template.json
然後使用此命令載入模板:
# 註:執行命令的位置和json模板相同[root@linuxprobe src]# curl -XPUT 'http://localhost:9200/_template/filebeat?pretty' -d@filebeat-index-template.json{ "acknowledged" : true}
現在我們的ELK伺服器已準備好接收Filebeat資料,移動到在每個用戶端伺服器上設定Filebeat。 設定Filebeat(添加用戶端伺服器)
對於要將日誌發送到ELK伺服器的每個CentOS或RHEL 7伺服器,請執行以下步驟。 複製ssl認證
在ELK伺服器上,將先決條件教程中建立的SSL認證複製到用戶端伺服器:
# 使用SCP遠程實現複製yum -y install openssh-clinets# scp /etc/pki/tls/certs/logstash-forwarder.crt root@linux-node1:/tmp# 註:如果不適用ip,記得在ELK伺服器上設定hosts
在提供您的登入憑據後,請確保認證複製成功。它是用戶端伺服器和ELK伺服器之間的通訊所必需的,在用戶端伺服器上,將ELK伺服器的SSL認證複製到適當的位置(/etc/pki/tls/certs):
[root@linux-node1 ~]# sudo mkdir -p /etc/pki/tls/certs[root@linux-node1 ~]# sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/
安裝Filebeat包
在用戶端伺服器上,建立運行以下命令將Elasticsearch公用GPG密鑰匯入rpm:參考上面:
sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch#echo '[elasticsearch-5.x]name=Elasticsearch repository for 5.x packagesbaseurl=https://artifacts.elastic.co/packages/5.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearchenabled=1autorefresh=1type=rpm-md' | sudo tee /etc/yum.repos.d/elasticsearch.repo
源建立完成之後使用yum安裝filebeat
yum makecache && yum install filebeat -ysudo chkconfig --add filebeat
配置filebeat
[root@linux-node1 ~]# egrep -v "#|^$" /etc/filebeat/filebeat.yml filebeat.prospectors:- input_type: log paths: - /var/log/secure # 新增 - /var/log/messages # 新增 - /var/log/*.logoutput.elasticsearch: hosts: ["localhost:9200"]output.logstash: hosts: ["kibana.aniu.co:5044"] # 修改為ELK上Logstash的串連方式 ssl.certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"] # 新增
Filebeat的設定檔是YAML格式的,注意縮排 啟動filebeat
sudo systemctl start filebeatsudo systemctl enable filebeat
註:用戶端前提是已經配置完成elasticsearch服務,並且設定好網域名稱解析
filebeat啟動完成後,可以觀察ELK上面的journalctl -f和logstash,以及用戶端的filebeat日誌,查看filebeat是否生效 串連Kibana
參考官方文檔設定:
https://www.elastic.co/guide/en/kibana/5.x/index.html
到此我們完成了ELK基礎環境的搭建,後面教程具體實現每個服務的具體功能,以及相關外掛程式的使用。