https://www.howtoing.com/how-to-install-elasticsearch-logstash-and-kibana-elk-stack-on-ubuntu-16-04
在本教程中,我們將在安裝Elasticsearch ELK在Ubuntu 16.04(即,Elasticsearch 2.3.x版本,Logstash 2.3.x版本,並Kibana 4.5.x)。我們也將告訴你如何配置它收集和可視化你的系統的系統日志進行集中...
2016-05-05 21:11:00
介紹
在本教程中,我們將討論在Ubuntu 16.04上安裝Elasticsearch ELK(即Elasticsearch 2.3.x,Logstash 2.3.x和Kibana 4.5.x)。 我們還將向您展示如何配置它,以使用Filebeat 1.2.x在集中式位置收集和可視化系統的syslog。Logstash是一個用於收集,解析和存儲日志以供將來使用的開源工具。 Kibana是一個Web界面,可用於搜索和查看Logstash索引的日志。 這兩個工具都基於Elasticsearch,用於存儲日志。
集中日志記錄在嘗試識別服務器或應用程序的問題時非常有用,因為它允許您在單個位置搜索所有日志。 它也很有用,因為它允許您通過在特定時間范圍內關聯其日志來識別跨多個服務器的問題。
可以使用Logstash收集所有類型的日志,但我們將本教程的范圍限制為syslog收集。
我們的目標
本教程的目標是設置Logstash以收集多個服務器的syslog,並設置Kibana以可視化收集的日志。
我們的ELK設置有四個主要組件:
- Logstash:用於處理傳入的日志Logstash的服務器組件
- Elasticsearch:存儲所有的日志
- Kibana:網絡接口,用於搜索和可視日志,這將在通過Nginx的代理
- Filebeat:安裝的客戶端服務器將發送其日志Logstash上,Filebeat作為一個利用樵夫網絡協議與Logstash通信的日志傳送代理

我們將一台服務器,其中,我們將參照作為我們ELK服務器上安裝的前三個分量。 Filebeat將被安裝在所有我們要收集原木,我們將把統稱為我們的客戶服務器客戶端服務器。
先決條件
要完成本教程,您將需要sudo在Ubuntu 16.04服務器上的訪問。 說明設置,最多可以在這里找到: 初始服務器設置與Ubuntu 16.04 。
如果你更喜歡使用CentOS的,而不是,看看這個教程: 如何在CentOS 7安裝ELK 。
您的ELK服務器將需要的CPU,RAM和存儲量取決於您要收集的日志的卷。 在本教程中,我們將使用具有以下規格的VPS用於我們的ELK服務器:
- 操作系統:Ubuntu 16.04
- RAM:4GB
- CPU:2
除了您的ELK服務器,您將需要有一些其他服務器,您將收集日志。
讓我們開始設置我們的ELK服務器!
安裝Java 8
Elasticsearch和Logstash需要Java,所以我們現在就安裝它。 我們將安裝最新版本的Oracle Java 8,因為這是Elasticsearch推薦的版本。 然而,它應該與OpenJDK,如果你決定走這條路線工作正常。
加入甲骨文的Java PPA為apt :
sudo add-apt-repository -y ppa:webupd8team/java
更新apt包數據庫:
sudo apt-get update
使用此命令安裝最新穩定版本的Oracle Java 8(並接受彈出的許可協議):
sudo apt-get -y install oracle-java8-installer
現在安裝了Java 8,我們安裝ElasticSearch。
安裝Elasticsearch
官網最新倉庫源:https://www.elastic.co/guide/en/elasticsearch/reference/current/deb.html
Elasticsearch可以通過添加Elastic的軟件包源列表與軟件包管理器一起安裝。
運行以下命令將Elasticsearch公共GPG密鑰導入apt:
wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
如果你的提示似乎掛起,它很可能在等待您的用戶密碼(授權sudo命令)。 如果是這種情況,請輸入您的密碼。
創建Elasticsearch源列表:
echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list
更新apt再次包數據庫:
sudo apt-get update
使用此命令安裝Elasticsearch:
sudo apt-get -y install elasticsearch
Elasticsearch現已安裝。 讓我們編輯配置:
sudo nano /etc/elasticsearch/elasticsearch.yml
您將要限制對Elasticsearch實例(端口9200)的外部訪問,因此外部人員無法讀取您的數據或通過HTTP API關閉Elasticsearch集群。 查找指定線路network.host ,取消它,並與“localhost”的,所以它看起來像這樣替換它的價值:
network.host: localhost
保存並退出elasticsearch.yml 。
現在,啟動Elasticsearch:
sudo systemctl restart elasticsearch
然后,運行以下命令在啟動時啟動Elasticsearch:
sudo systemctl daemon-reload sudo systemctl enable elasticsearch
現在Elasticsearch啟動並運行,讓我們安裝Kibana。
安裝Kibana
Kibana可以通過添加Elastic的軟件包源列表與軟件包管理器一起安裝。
將Kibana添加到源列表中:
echo "deb http://packages.elastic.co/kibana/4.5/debian stable main" | sudo tee -a /etc/apt/sources.list
更新apt包數據庫:
sudo apt-get update
使用此命令安裝Kibana:
sudo apt-get -y install kibana
Kibana現已安裝。
打開Kibana配置文件進行編輯:
sudo nano /opt/kibana/config/kibana.yml
在Kibana配置文件,找到指定線server.host ,並替換為“本地主機”的IP地址(由“0.0.0.0”默認值):
server.host: "localhost"
保存並退出。 這個設置使得Kibana只能訪問localhost。 這很好,因為我們將使用Nginx反向代理允許外部訪問。
現在啟用Kibana服務,並啟動它:
sudo systemctl daemon-reload sudo systemctl enable kibana sudo systemctl start kibana
在我們可以使用Kibana Web界面之前,我們必須設置一個反向代理。 讓我們現在做,與Nginx。
安裝Nginx
因為我們配置Kibana為監聽localhost ,我們必須建立一個反向代理,允許它的外部訪問。 我們將使用Nginx為此目的。
host值, /opt/kibana/config/kibana.yml ,您Kibana服務器的專用IP地址或主機名)。 此外,建議您啟用SSL / TLS。
使用apt安裝Nginx的:
sudo apt-get -y install nginx
使用openssl創建一個管理員用戶,被稱為“kibanaadmin”(你應該使用另一個名字),可以訪問Kibana Web界面:
sudo -v echo "kibanaadmin:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users
在提示符處輸入密碼。 記住此登錄信息,因為您需要訪問Kibana Web界面。
現在打開你喜歡的編輯器中的Nginx默認服務器塊:
sudo nano /etc/nginx/sites-available/default
刪除文件的內容,並將以下代碼塊粘貼到文件中。 請務必更新server_name以匹配您的服務器的名稱或公網IP地址:
server { listen 80; server_name example.com; 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流量直接到Kibana應用程序,它監聽localhost:5601 。 此外,Nginx的將使用htpasswd.users文件,我們前面創建和要求基本身份驗證。
現在,檢查配置語法錯誤,並重新啟動Nginx如果沒有找到:
sudo nginx -t sudo systemctl restart nginx
如果您按照16.04的初始服務器設置指南,您已啟用UFW防火牆。 要允許連接到Nginx,我們可以通過鍵入以下內容來調整規則:
sudo ufw allow 'Nginx Full'
Kibana現在是通過您的FQDN或ELK服務器即公網IP地址訪問的http://麋鹿\ _ SERVER \ _Public \ _ip / 。 如果您在網絡瀏覽器中訪問,輸入“kibanaadmin”憑據后,您應該看到一個Kibana歡迎頁面,它將要求您配置索引模式。 讓我們回到那以后,在我們安裝所有其他組件。
安裝Logstash
Logstash包可以從與Elasticsearch相同的存儲庫獲得,我們已經安裝了該公鑰,所以讓我們將Logstash添加到我們的源列表:
echo "deb http://packages.elastic.co/logstash/2.3/debian stable main" | sudo tee -a /etc/apt/sources.list
更新apt包數據庫:
sudo apt-get update
使用此命令安裝Logstash:
sudo apt-get install logstash
已安裝Logstash,但尚未配置。
生成SSL證書
由於我們將使用Filebeat將日志從我們的客戶端服務器發送到我們的ELK服務器,我們需要創建一個SSL證書和密鑰對。 Filebeat使用該證書來驗證ELK Server的身份。 使用以下命令創建將存儲證書和私鑰的目錄:
sudo mkdir -p /etc/pki/tls/certs sudo mkdir /etc/pki/tls/private
現在,您有兩個選項用於生成SSL證書。 如果你有一個DNS設置,讓您的客戶端服務器解析服務器ELK的IP地址,使用選項2,否則, 選項1將允許您使用IP地址。
選項1:IP地址
如果沒有DNS設置,這將讓你的服務器,你會收集日志從,解決您的ELK的IP地址,服務器,你將有你的ELK服務器的私有IP地址添加到subjectAltName (SAN)字段,我們將要生成的SSL證書。 為此,請打開OpenSSL配置文件:
sudo nano /etc/ssl/openssl.cnf
找到[ v3_ca ]文件中的部分,並根據它(代在ELK服務器的私有IP地址 )添加這一行:
subjectAltName = IP: ELK_server_private_IP
保存並退出。
現在產生的相應位置的SSL證書和私鑰( /etc/pki/tls/... ),用下面的命令:
cd /etc/pki/tls sudo openssl req -config /etc/ssl/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt
該logstash-forwarder.crt文件將被復制到所有將日志發送到Logstash的服務器,但我們會做到這一點稍晚。 讓我們完成我們的Logstash配置。 如果您使用此選項去了,跳過選項2並移動到配置Logstash。
選項2:FQDN(DNS)
如果您的DNS設置與您的專用網絡,您應該創建一個A記錄,包含ELK服務器的私有IP地址 - 這個域名將在下一個命令中使用,以生成SSL證書。 或者,您可以使用指向服務器的公共IP地址的記錄。 只要確保您的服務器(您將收集日志的服務器)將能夠將域名解析到您的ELK服務器。
現在生成的SSL證書和私鑰,在適當的位置( /etc/pki/tls/... ),具有以下(在ELK服務器的FQDN替補):
cd /etc/pki/tls sudo 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
該logstash-forwarder.crt文件將被復制到所有將日志發送到Logstash的服務器,但我們會做到這一點稍晚。 讓我們完成我們的Logstash配置。
配置Logstash
Logstash配置文件中的JSON格式,並居住在/etc/logstash/conf.d 。 該配置由三個部分組成:輸入,濾波器和輸出。
讓我們創建一個名為的配置文件02-beats-input.conf ,並成立了“filebeat”輸入:
sudo nano /etc/logstash/conf.d/02-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" } }
保存並退出。 這指定了一個beats輸入,將監聽TCP端口5044 ,它將使用我們前面創建的SSL證書和私鑰。
如果您遵循Ubuntu 16.04初始服務器設置指南,您將配置UFW防火牆。 為了讓Logstash到端口接收連接5044 ,我們需要打開端口:
sudo ufw allow 5044
現在,讓我們創建一個配置文件名為10-syslog-filter.conf ,在這里我們將添加一個過濾系統日志消息:
sudo nano /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" ] } } }
保存並退出。 該過濾器會尋找被標記為“系統日志”類型(Filebeat)日志,它會嘗試使用grok來分析傳入的syslog日志,使之結構化和查詢能力。
最后,我們將創建一個名為的配置文件30-elasticsearch-output.conf :
sudo nano /etc/logstash/conf.d/30-elasticsearch-output.conf
插入下面的輸出配置:
output { elasticsearch { hosts => ["localhost:9200"] sniffing => true manage_template => false index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}" document_type => "%{[@metadata][type]}" } }
保存並退出。 該輸出基本上配置Logstash存儲其在運行中Elasticsearch的Beats數據localhost:9200 ,在所使用的拍子命名的索引(filebeat,在我們的情況下)。
如果要為使用Filebeat輸入的其他應用程序添加過濾器,請確保對文件命名,以便在輸入和輸出配置之間進行排序(即在02-和30-之間)。
使用此命令測試Logstash配置:
sudo /opt/logstash/bin/logstash --configtest -f /etc/logstash/conf.d/
幾秒鍾后,它應該顯示Configuration OK ,如果沒有語法錯誤。 否則,請嘗試並讀取錯誤輸出,以查看您的Logstash配置有什么問題。
重新啟動Logstash並啟用它,以使配置更改生效:
sudo systemctl restart logstash sudo systemctl enable logstash
Logstash會監聽
接下來,我們將加載示例Kibana儀表板。
加載Kibana儀表板
Elastic提供了幾個樣例Kibana儀表板和Beats索引模式,可以幫助您開始使用Kibana。 雖然我們不會在本教程中使用儀表板,我們仍將加載它們,以便我們可以使用它包括的Filebeat索引模式。
使用curl將文件下載到你的主目錄:
cd ~ curl -L -O https://download.elastic.co/beats/dashboards/beats-dashboards-1.2.2.zip
安裝unzip包用這個命令:
sudo apt-get -y install unzip
接下來,提取歸檔的內容:
unzip beats-dashboards-*.zip
並使用以下命令將樣本儀表板,可視化和Beats索引模式加載到Elasticsearch中:
cd beats-dashboards-* ./load.sh
這些是我們剛加載的索引模式:
- packetbeat- *
- topbeat- *
- filebeat- *
- winlogbeat- *
當我們開始使用Kibana時,我們將選擇Filebeat索引模式作為默認值。
在Elasticsearch中加載Filebeat索引模板
因為我們計划使用Filebeat將日志發送到Elasticsearch,我們應該加載Filebeat索引模板。 索引模板將配置Elasticsearch以智能方式分析傳入的Filebeat字段。
首先,將Filebeat索引模板下載到您的主目錄:
cd ~ curl -O https://gist.githubusercontent.com/thisismitch/3429023e8438cc25b86c/raw/d8c479e2a1adcea8b1fe86570e42abab0f10f364/filebeat-index-template.json
然后使用此命令加載模板:
curl -XPUT 'http://localhost:9200/_template/filebeat?pretty' -d@filebeat-index-template.json
如果模板加載正確,您應該看到這樣的消息:
{ "acknowledged" : true }
現在我們的ELK服務器已准備好接收Filebeat數據,讓我們轉到在每個客戶端服務器上設置Filebeat。
設置Filebeat(添加客戶端服務器)
對於您要將日志發送到ELK服務器上的Logstash的每個Ubuntu或Debian服務器,請執行以下步驟。 有關在基於Red Hat Linux發行版(如RHEL,CentOS的,等等)安裝Filebeat說明,請參閱設置Filebeat(添加客戶端服務器)部分本教程的CentOS的變化。
復制SSL證書
在您的ELK服務器 ,復制您創建的客戶端服務器的SSL證書(替代客戶端服務器的地址和自己的登錄):
scp /etc/pki/tls/certs/logstash-forwarder.crt user@client_server_private_address:/tmp
提供登錄憑據后,請確保證書復制成功。 它是客戶端服務器和ELK服務器之間的通信所必需的。
現在,你的客戶端服務器上,復制ELK服務器的SSL證書到相應位置( /etc/pki/tls/certs ):
sudo mkdir -p /etc/pki/tls/certs sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/
現在我們將安裝Topbeat包。
安裝Filebeat包
在客戶端服務器 ,創建了Beats源列表:
echo "deb https://packages.elastic.co/beats/apt stable main" | sudo tee -a /etc/apt/sources.list.d/beats.list
它還使用與Elasticsearch相同的GPG密鑰,可以使用此命令安裝:
wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
然后安裝Filebeat包:
sudo apt-get update sudo apt-get install filebeat
已安裝Filebeat,但尚未配置。
配置Filebeat
現在我們將配置Filebeat連接到我們的ELK服務器上的Logstash。 本節將逐步介紹如何修改Filebeat附帶的示例配置文件。 當你完成這些步驟,你應該有一個看起來像一個文件這樣 。
在客戶端服務器 ,創建和編輯Filebeat配置文件:
sudo nano /etc/filebeat/filebeat.yml
接近文件的頂部,你會看到prospectors節,這是你可以定義指定淘金哪些日志文件應運,他們應該如何處理。 每個探礦者被標明-字符。
我們將修改現有探礦發送syslog和auth.log到Logstash。 在paths ,注釋掉- /var/log/*.log文件。這將防止Filebeat發送每.log在那個目錄中Logstash。 然后,添加新條目syslog和auth.log 。 完成后應該看起來像這樣:
... paths: - /var/log/auth.log - /var/log/syslog # - /var/log/*.log ...
然后,找到指定行document_type:取消並改變其值設置為“系統日志”。 在修改后應該看起來像這樣:
... document_type: syslog ...
這指定在這個探礦的日志類型的syslog(這是我們Logstash過濾器正在尋找的類型)。
如果要將其他文件發送到ELK服務器,或對Filebeat處理日志的方式進行任何更改,請隨時修改或添加探測器條目。
接下來,根據output部分,找到這行elasticsearch:這表明Elasticsearch輸出部分(我們不打算使用) 刪除或注釋掉整個Elasticsearch輸出部分 (最多這行#logstash: )。
找到注釋掉Logstash輸出部分,由這行表示#logstash:並通過刪除前面的注釋它# 。 在本節中,取消對hosts: ["localhost:5044"]行。 更改localhost到您的ELK服務器的私有IP地址(或主機名,如果您使用該選項了):
### Logstash as output logstash: # The Logstash hosts hosts: ["ELK_server_private_IP:5044"]
這將配置Filebeat連接到Logstash在端口ELK服務器5044 (我們指定的Logstash輸入早些時候端口)。
直屬hosts條目,並使用相同的縮進,加入這一行:
### Logstash as output logstash: # The Logstash hosts hosts: ["ELK_server_private_IP:5044"] bulk_max_size: 1024
接下來,找到了tls部分,並取消它。 然后取消對指定線路certificate_authorities ,它的值更改為["/etc/pki/tls/certs/logstash-forwarder.crt"] 。 它應該看起來像這樣:
... tls: # List of root certificates for HTTPS server verifications certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]
這將Filebeat配置為使用我們在ELK服務器上創建的SSL證書。
保存並退出。
現在重新啟動Filebeat將我們的更改放置到位:
sudo systemctl restart filebeat sudo systemctl enable filebeat
同樣,如果你如果你的Filebeat配置是否正確還不能確定,比較它反對這個例子Filebeat配置 。
現在Filebeat發送syslog和auth.log到Logstash您的ELK服務器上! 對於您要收集日志的所有其他服務器重復此部分。
測試Filebeat安裝
如果您的ELK已正確設置,Filebeat(在客戶端服務器上)應將您的日志發送到ELK服務器上的Logstash。 Logstash應該使用我們先前導入的索引將Filebeat數據加載到Elasticsearch中。
在您的ELK服務器 ,驗證Elasticsearch確實通過查詢Filebeat指數使用此命令接收數據:
curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'
你應該看到一堆看起來像這樣的輸出:
... { "_index" : "filebeat-2016.01.29", "_type" : "log", "_id" : "AVKO98yuaHvsHQLa53HE", "_score" : 1.0, "_source":{"message":"Feb 3 14:34:00 rails sshd[963]: Server listening on :: port 22.","@version":"1","@timestamp":"2016-01-29T19:59:09.145Z","beat":{"hostname":"topbeat-u-03","name":"topbeat-u-03"},"count":1,"fields":null,"input_type":"log","offset":70,"source":"/var/log/auth.log","type":"log","host":"topbeat-u-03"} } ...
如果您的輸出顯示總計0次點擊,Elasticsearch不會在您搜索的索引下加載任何日志,您應該檢查您的設置是否有錯誤。 如果收到預期的輸出,請繼續下一步。
連接到Kibana
當您在要收集日志的所有服務器上完成Filebeat設置后,讓我們看看Kibana,我們之前安裝的Web界面。
在Web瀏覽器中,轉到您的ELK服務器的FQDN或公共IP地址。 輸入“kibanaadmin”憑據后,您應該看到一個頁面,提示您配置默認索引模式:

來吧,從索引模式菜單(左側)選擇filebeat- *,然后單擊星(設置為默認索引)按鈕設置Filebeat指數為默認值。
現在點擊頂部導航欄中的鏈接發現 。 默認情況下,這將顯示過去15分鍾內的所有日志數據。 您應該會看到帶有日志事件的直方圖,其中包含以下日志消息:

現在,在那里不會有太多,因為你只是從您的客戶端服務器收集系統日志。 在這里,您可以搜索和瀏覽您的日志。 您還可以自定義信息中心。
嘗試以下事項:
- 搜索“root”以查看是否有人嘗試以root身份登錄到您的服務器
- 搜索一個特定的主機名(搜索
host: " hostname ") - 通過在直方圖上或從上面的菜單中選擇一個區域來更改時間范圍
- 點擊直方圖下面的消息,查看數據是如何過濾的
Kibana有許多其他功能,如圖形和過濾,所以隨便捅!
結論
現在你的系統日志通過Elasticsearch和Logstash集中,你可以用Kibana可視化它們,你應該有一個很好的開始,集中所有重要的日志。 記住,你可以發送幾乎任何類型的日志或索引的數據到Logstash,但如果數據被解析和結構與grok,數據變得更加有用。
為了提高新ELK,你應該考慮收集和過濾Logstash你的其他日志和創造Kibana儀表板 。 您可能還需要通過使用Topbeat收集系統度量與ELK。 所有這些主題都在本系列的其他教程中介紹。
祝你好運!
