此過程是親自實踐過的磨确,一步步下來可成功安裝箕般,如有問題可以聯(lián)系我佃扼。
目錄
第 1 部分 簡介
第 2 部分 先決條件
第 3 部分 安裝配置過程
- 第 1 步 - 安裝和配置Elasticsearch
- 第 2 步 - 安裝和配置Kibana儀表板
- 第 3 步 - 安裝和配置Logstash
- 第 4 步 - 安裝和配置Filebeat
- 第 5 步 - 探索Kibana儀表板
第 4 部分 總結
第 5 部分 參考文獻
第 1 部分 簡介
Elastic Stack(以前稱為ELK Stack )是由Elastic生成的開源軟件集合兴枯,允許您以任何格式搜索由缆,分析和可視化從任何源生成的日志汗盘,這種做法稱為集中式日志記錄 皱碘。 在嘗試識別服務器或應用程序的問題時,集中日志記錄非常有用隐孽,因為它允許您在一個位置搜索所有日志癌椿。 它也很有用,因為它允許您通過在特定時間范圍內關聯(lián)其日志來識別跨多個服務器的問題缓醋。
我們將在Ubuntu 18.04服務器上重新安裝Elastic Stack如失。您將學習如何安裝Elastic Stack的所有組件(包括Filebeat,用于轉發(fā)和集中日志和文件的Beat)送粱,并配置它們以收集和可視化系統(tǒng)日志褪贵。我們將在單個服務器上安裝所有組件,我們將其稱為Elastic Stack Server抗俄。
Elastic Stack有四個主要組件:
組件 | 說明 |
---|---|
Elasticsearch | 一個分布式RESTful搜索引擎脆丁,用于存儲所有收集的數(shù)據(jù) |
Logstash | Elastic Stack的數(shù)據(jù)處理組件,用于將傳入數(shù)據(jù)發(fā)送到Elasticsearch |
Kibana | 用于搜索和可視化日志的Web界面 |
Beats | 輕量級动雹,單一用途的數(shù)據(jù)發(fā)布者槽卫,可以將數(shù)百或數(shù)千臺計算機中的數(shù)據(jù)發(fā)送到Logstash或Elasticsearch |
在本文中,您將在Ubuntu 18.04服務器上安裝Elastic Stack 胰蝠。 您將學習如何安裝Elastic Stack的所有組件 - 包括Filebeat 歼培,用于轉發(fā)和集中日志和文件的Beat - 并配置它們以收集和可視化系統(tǒng)日志。 此外茸塞,由于Kibana通常只在localhost上可用躲庄,我們將使用Nginx代理它,以便可以通過Web瀏覽器訪問它钾虐。 我們將在單個服務器上安裝所有這些組件噪窘,我們將其稱為Elastic Stack服務器 。
注意 :安裝Elastic Stack時效扫,必須在整個中使用相同的版本倔监。在撰寫本文時直砂,它們是Elasticsearch 6.8.6,Kibana 6.8.6浩习,Logstash 6.8.6和Filebeat 6.8.6静暂。
第 2 部分 先決條件
按照Ubuntu 18.04的初始服務器設置指南設置Ubuntu 18.04服務器,包括具有sudo權限的非root用戶和使用ufw配置的防火墻瘦锹。 Elastic Stack服務器所需的CPU籍嘹,RAM和存儲量取決于您要收集的日志量。 在本教程中弯院,我們將使用具有以下Elastic Stack服務器規(guī)范的VPS:
操作系統(tǒng) | Ubuntu 18.04 |
內存 | 4GB |
CPU | 2 |
軟件 | Java,Nginx |
- Java安裝參考 | 如何在Ubuntu
18.04上安裝Java -> Elasticsearch和Logstash所需 - Nginx安裝參考 | 如何在Ubuntu
18.04上安裝配置Nginx -> 后面需要配置為Kibana的反向代理
第 3 部分 安裝配置過程
為隱私考慮泪掀,文中用xx.xx.xx.xx 替代了安裝Elastic Stack服務器的IP
第 1 步 - 安裝和配置Elasticsearch
Ubuntu的默認包存儲庫中不提供Elastic Stack組件听绳。 但是,在添加Elastic的包源列表后异赫,它們可以與APT一起安裝椅挣。
所有Elastic Stack的軟件包都使用Elasticsearch簽名密鑰進行簽名,以保護您的系統(tǒng)免受軟件包欺騙塔拳。 使用密鑰進行身份驗證的軟件包將被包管理器視為信任鼠证。 在此步驟中,您將導入Elasticsearch公共GPG密鑰并添加Elastic包源列表以安裝Elasticsearch靠抑。
首先量九,運行以下命令將Elasticsearch公共GPG密鑰導入APT:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
接下來,將Elastic源列表添加到sources.list.d目錄颂碧,其中APT將查找新的源:
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
接下來荠列,更新您的包列表,以便APT讀取新的Elastic源:
sudo apt update
然后使用以下命令安裝Elasticsearch:
sudo apt install elasticsearch
完成Elasticsearch安裝后载城,使用首選文本編輯器編輯Elasticsearch的主配置文件elasticsearch.yml 肌似。 在這里,我們將使用nano :
sudo nano /etc/elasticsearch/elasticsearch.yml
注意: Elasticsearch的配置文件采用YAML格式诉瓦,這意味著縮進非常重要川队! 編輯此文件時,請確保不添加任何額外的空格睬澡。
Elasticsearch監(jiān)聽來自端口9200上各處的流量固额。 您需要限制對Elasticsearch實例的外部訪問,以防止外人通過REST API讀取您的數(shù)據(jù)或關閉您的Elasticsearch集群猴贰。 找到指定network.host的行对雪,取消注釋,并將其值替換為xx.xx.xx.xx 米绕,如下所示:
/etc/elasticsearch/elasticsearch.yml
. . .
network.host: xx.xx.xx.xx
. . .
按CTRL+X保存并關閉elasticsearch.yml 瑟捣,接著是Y 馋艺,然后如果你使用的是nano ,則ENTER 迈套。 然后捐祠,使用systemctl啟動Elasticsearch服務:
sudo systemctl start elasticsearch
接下來,運行以下命令以使Elasticsearch在每次服務器啟動時啟動:
sudo systemctl enable elasticsearch
您可以通過發(fā)送HTTP請求來測試您的Elasticsearch服務是否正在運行:
curl -X GET "xx.xx.xx.xx:9200"
您將看到一個響應桑李,顯示有關本地節(jié)點的一些基本信息踱蛀,類似于:
{
"name" : "8eSrAWi",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "33qILJRuTKyTh8rDMlvS7g",
"version" : {
"number" : "6.8.6",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "3d9f765",
"build_date" : "2019-12-13T17:11:52.013738Z",
"build_snapshot" : false,
"lucene_version" : "7.7.2",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
現(xiàn)在Elasticsearch已經(jīng)啟動并運行,讓我們安裝Kibana贵白,它是Elastic Stack的下一個組件率拒。
第 2 步 - 安裝和配置Kibana儀表板
根據(jù)官方文檔 ,您應該在安裝Elasticsearch之后安裝Kibana禁荒。 按此順序安裝可確保每個產(chǎn)品所依賴的組件正確到位猬膨。
因為您已經(jīng)在上一步中添加了Elastic包源,所以您可以使用apt安裝Elastic Stack的其余組件:
sudo apt install kibana
更改kibana.yml呛伴,確保其他主機能夠連接kibana主機
sudo nano /etc/kibana/kibana.yml
更改成如下所示
server.port: 5601
server.host: "xx.xx.xx.xx"
elasticsearch.hosts: ["http://xx.xx.xx.xx:9200"]
查看更改的kibana.yml配置文件內容
$ grep ^[a-Z] /etc/kibana/kibana.yml
更改后的配置文件內容
server.port: 5601
server.host: "xx.xx.xx.xx"
elasticsearch.hosts: ["http://xx.xx.xx.xx:9200"]
然后啟用并啟動Kibana服務:
sudo systemctl enable kibana
sudo systemctl start kibana
由于Kibana配置為僅監(jiān)聽xx.xx.xx.xx 勃痴,因此我們必須設置反向代理以允許對其進行外部訪問。 我們將使用Nginx來實現(xiàn)此目的热康,它應該已經(jīng)安裝在您的服務器上沛申。
首先,使用openssl命令創(chuàng)建一個管理Kibana用戶姐军,您將使用該用戶訪問Kibana Web界面铁材。 例如,我們將此帳戶kibanaadmin 庶弃,但為了確保更高的安全性衫贬,我們建議您為用戶選擇難以猜測的非標準名稱。
以下命令將創(chuàng)建管理Kibana用戶和密碼歇攻,并將它們存儲在htpasswd.users文件中固惯。 您將配置Nginx以要求此用戶名和密碼并立即讀取此文件:
echo "kibanaadmin:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users
在提示符下輸入并確認密碼。 記住或記下此登錄信息缴守,因為您需要它來訪問Kibana Web界面葬毫。
接下來,我們將創(chuàng)建一個Nginx服務器塊文件屡穗。 例如贴捡,我們將此文件稱為elk:
sudo nano /etc/nginx/sites-available/elk
如果您為此服務器設置了FQDN和DNS記錄,則可以在FQDN之后命名此文件,:
sudo nano /etc/nginx/sites-available/example.com
將以下代碼塊添加到文件中村砂,確保更新example.com以匹配服務器的FQDN或公共IP地址烂斋。 此代碼將Nginx配置為將服務器的HTTP流量定向到Kibana應用程序,該應用程序正在監(jiān)聽xx.xx.xx.xx:5601 。 此外汛骂,它配置Nginx以讀取htpasswd.users文件并需要基本身份驗證罕模。
請注意,如果您遵循先決條件Nginx教程直到最后帘瞭,您可能已經(jīng)創(chuàng)建了此文件并使用一些內容填充它淑掌。 在這種情況下,請在添加以下內容之前刪除文件中的所有現(xiàn)有內容:
/etc/nginx/sites-available/elk
server {
listen 80;
server_name xx.xx.xx.xx;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/htpasswd.users;
location / {
proxy_pass http://xx.xx.xx.xx: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;
}
}
完成后蝶念,保存并關閉文件抛腕。
接下來,通過創(chuàng)建指向sites-enabled目錄的符號鏈接來啟用新配置媒殉。 如果您已在Nginx先決條件中創(chuàng)建了具有相同名稱的服務器塊文件担敌,則無需運行此命令:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/elk
然后檢查配置是否存在語法錯誤:
sudo nginx -t
如果輸出中報告了任何錯誤,請返回并仔細檢查您在配置文件中放置的內容是否已正確添加廷蓉。 一旦看到輸出中的syntax is ok 柄错,請繼續(xù)并重新啟動Nginx服務:
sudo systemctl restart nginx
如果您按照初始服務器設置指南進行操作,則應啟用UFW防火墻苦酱。 要允許連接到Nginx,我們可以通過鍵入以下內容來調整規(guī)則:
sudo ufw allow 'Nginx Full'
注意:如果您遵循先決條件Nginx教程给猾,則可能已創(chuàng)建了允許Nginx HTTP配置文件通過防火墻的UFW規(guī)則疫萤。 由于Nginx Full配置文件允許通過防火墻的HTTP和HTTPS流量,因此您可以安全地刪除在先決條件教程中創(chuàng)建的規(guī)則敢伸。 使用以下命令執(zhí)行此操作:
sudo ufw delete allow 'Nginx HTTP'
現(xiàn)在可以通過您的FQDN或Elastic Stack服務器的公共IP地址訪問Kibana扯饶。 您可以通過導航到以下地址并在出現(xiàn)提示時輸入登錄憑據(jù)來檢查Kibana服務器的狀態(tài)頁面:
http://your_server_ip/status
此狀態(tài)頁面顯示有關服務器資源使用情況的信息,并列出已安裝的插件池颈。
注意 :如前提條件部分所述尾序,建議您在服務器上啟用SSL / TLS。 您現(xiàn)在可以參照在Ubuntu
18.04上獲取Nginx的免費SSL證書(如何保護Nginx躯砰,讓我們在Ubuntu 18.04上加密)每币。
獲得SSL / TLS證書后,您可以返回并完成本文琢歇。
現(xiàn)在配置了Kibana儀表板兰怠,讓我們安裝下一個組件:Logstash。
第 3 步 - 安裝和配置Logstash
雖然Beats可以將數(shù)據(jù)直接發(fā)送到Elasticsearch數(shù)據(jù)庫李茫,但我們建議使用Logstash來處理數(shù)據(jù)揭保。 這將允許您從不同的源收集數(shù)據(jù),將其轉換為通用格式魄宏,并將其導出到另一個數(shù)據(jù)庫秸侣。
使用以下命令安裝Logstash:
sudo apt install logstash
安裝Logstash后,您可以繼續(xù)進行配置。 Logstash的配置文件以JSON格式編寫味榛,并駐留在/etc/logstash/conf.d目錄中椭坚。 在配置它時,將Logstash視為一個管道励负,將一端接收數(shù)據(jù)藕溅,以某種方式處理它,然后將其發(fā)送到目的地(在這種情況下继榆,目標是Elasticsearch)是有幫助的巾表。 Logstash管道有兩個必需元素, input和output 略吨,以及一個可選元素filter 集币。 輸入插件使用來自源的數(shù)據(jù),過濾器插件處理數(shù)據(jù)翠忠,輸出插件將數(shù)據(jù)寫入目標鞠苟。
創(chuàng)建一個名為02-beats-input.conf的配置文件,您將在其中設置Filebeat輸入:
sudo nano /etc/logstash/conf.d/02-beats-input.conf
插入以下input配置秽之。 這指定將在TCP端口5044上監(jiān)聽的beats輸入当娱。
/etc/logstash/conf.d/02-beats-input.conf
input {
beats {
port => 5044
}
}
保存并關閉文件。
接下來考榨,創(chuàng)建一個名為10-syslog-filter.conf的配置文件跨细,我們將在其中添加系統(tǒng)日志過濾器,也稱為syslogs :
sudo nano /etc/logstash/conf.d/10-syslog-filter.conf
插入以下syslog過濾器配置河质。 此示例系統(tǒng)日志配置取自官方Elastic文檔 冀惭。 此過濾器用于解析傳入的系統(tǒng)日志,使其由預定義的Kibana儀表板構建和使用:
/etc/logstash/conf.d/10-syslog-filter.conf
filter {
if [fileset][module] == "system" {
if [fileset][name] == "auth" {
grok {
match => { "message" => ["%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} %{DATA:[system][auth][ssh][method]} for (invalid user )?%{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]} port %{NUMBER:[system][auth][ssh][port]} ssh2(: %{GREEDYDATA:[system][auth][ssh][signature]})?",
"%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} user %{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]}",
"%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: Did not receive identification string from %{IPORHOST:[system][auth][ssh][dropped_ip]}",
"%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sudo(?:\[%{POSINT:[system][auth][pid]}\])?: \s*%{DATA:[system][auth][user]} :( %{DATA:[system][auth][sudo][error]} ;)? TTY=%{DATA:[system][auth][sudo][tty]} ; PWD=%{DATA:[system][auth][sudo][pwd]} ; USER=%{DATA:[system][auth][sudo][user]} ; COMMAND=%{GREEDYDATA:[system][auth][sudo][command]}",
"%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} groupadd(?:\[%{POSINT:[system][auth][pid]}\])?: new group: name=%{DATA:system.auth.groupadd.name}, GID=%{NUMBER:system.auth.groupadd.gid}",
"%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} useradd(?:\[%{POSINT:[system][auth][pid]}\])?: new user: name=%{DATA:[system][auth][user][add][name]}, UID=%{NUMBER:[system][auth][user][add][uid]}, GID=%{NUMBER:[system][auth][user][add][gid]}, home=%{DATA:[system][auth][user][add][home]}, shell=%{DATA:[system][auth][user][add][shell]}$",
"%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} %{DATA:[system][auth][program]}(?:\[%{POSINT:[system][auth][pid]}\])?: %{GREEDYMULTILINE:[system][auth][message]}"] }
pattern_definitions => {
"GREEDYMULTILINE"=> "(.|\n)*"
}
remove_field => "message"
}
date {
match => [ "[system][auth][timestamp]", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
geoip {
source => "[system][auth][ssh][ip]"
target => "[system][auth][ssh][geoip]"
}
}
else if [fileset][name] == "syslog" {
grok {
match => { "message" => ["%{SYSLOGTIMESTAMP:[system][syslog][timestamp]} %{SYSLOGHOST:[system][syslog][hostname]} %{DATA:[system][syslog][program]}(?:\[%{POSINT:[system][syslog][pid]}\])?: %{GREEDYMULTILINE:[system][syslog][message]}"] }
pattern_definitions => { "GREEDYMULTILINE" => "(.|\n)*" }
remove_field => "message"
}
date {
match => [ "[system][syslog][timestamp]", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
}
}
}
接下來掀鹅,創(chuàng)建一個名為11-nginx-filter.conf的配置文件散休,我們將在其中添加nginx日志過濾器,也稱為nginxlogs :
sudo nano /etc/logstash/conf.d/11-nginx-filter.conf
插入以下syslog過濾器配置乐尊。 此示例系統(tǒng)日志配置取自官方Elastic文檔 戚丸。 此過濾器用于解析傳入的系統(tǒng)日志,使其由預定義的Kibana儀表板構建和使用:
/etc/logstash/conf.d/11-nginx-filter.conf
filter {
if [fileset][module] == "nginx" {
if [fileset][name] == "access" {
grok {
match => { "message" => ["%{IPORHOST:[nginx][access][remote_ip]} - %{DATA:[nginx][access][user_name]} \[%{HTTPDATE:[nginx][access][time]}\] \"%{WORD:[nginx][access][method]} %{DATA:[nginx][access][url]} HTTP/%{NUMBER:[nginx][access][http_version]}\" %{NUMBER:[nginx][access][response_code]} %{NUMBER:[nginx][access][body_sent][bytes]} \"%{DATA:[nginx][access][referrer]}\" \"%{DATA:[nginx][access][agent]}\""] }
remove_field => "message"
}
mutate {
add_field => { "read_timestamp" => "%{@timestamp}" }
}
date {
match => [ "[nginx][access][time]", "dd/MMM/YYYY:H:m:s Z" ]
remove_field => "[nginx][access][time]"
}
useragent {
source => "[nginx][access][agent]"
target => "[nginx][access][user_agent]"
remove_field => "[nginx][access][agent]"
}
geoip {
source => "[nginx][access][remote_ip]"
target => "[nginx][access][geoip]"
}
}
else if [fileset][name] == "error" {
grok {
match => { "message" => ["%{DATA:[nginx][error][time]} \[%{DATA:[nginx][error][level]}\] %{NUMBER:[nginx][error][pid]}#%{NUMBER:[nginx][error][tid]}: (\*%{NUMBER:[nginx][error][connection_id]} )?%{GREEDYDATA:[nginx][error][message]}"] }
remove_field => "message"
}
mutate {
rename => { "@timestamp" => "read_timestamp" }
}
date {
match => [ "[nginx][error][time]", "YYYY/MM/dd H:m:s" ]
remove_field => "[nginx][error][time]"
}
}
}
}
完成后保存并關閉文件科吭。
最后昏滴,創(chuàng)建一個名為30-elasticsearch-output.conf的配置文件:
sudo nano /etc/logstash/conf.d/30-elasticsearch-output.conf
插入以下output配置。 本質上对人,此輸出將Logstash配置為將Beats數(shù)據(jù)存儲在Elasticsearch中谣殊,該數(shù)據(jù)在xx.xx.xx.xx:9200運行,位于以Beat使用的名稱命名的索引中牺弄。 本教程中使用的Beat是Filebeat:
/etc/logstash/conf.d/30-elasticsearch-output.conf
output {
elasticsearch {
hosts => ["xx.xx.xx.xx:9200"]
manage_template => false
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
}
}
保存并關閉文件姻几。
注意:如果要為使用Filebeat輸入的其他應用程序添加過濾器,請確保將文件命名為在輸入和輸出配置之間進行排序,這意味著文件名應以02和30之間的兩位數(shù)字開頭蛇捌。
使用以下命令測試Logstash配置:
sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -t
如果沒有語法錯誤抚恒,幾秒鐘后輸出將顯示Configruation OK 。 如果在輸出中沒有看到此信息络拌,請檢查輸出中出現(xiàn)的任何錯誤并更新配置以更正它們俭驮。
如果配置測試成功,請啟動并啟用Logstash以使配置更改生效:
sudo systemctl start logstash
sudo systemctl enable logstash
現(xiàn)在Logstash正確運行并完全配置春贸,讓我們安裝Filebeat混萝。
第 4 步 - 安裝和配置Filebeat
Elastic Stack使用幾個名為Beats的輕量級數(shù)據(jù)發(fā)送器來收集各種來源的數(shù)據(jù),并將它們傳輸?shù)絃ogstash或Elasticsearch萍恕。 以下是目前Elastic提供的Beats:
Filebeat | 收集并發(fā)送日志文件 |
Metricbeat | 從您的系統(tǒng)和服務中收集指標 |
Packetbeat | 收集和分析網(wǎng)絡數(shù)據(jù) |
Winlogbeat | 收集Windows事件日志 |
Auditbeat | 收集Linux審計框架數(shù)據(jù)并監(jiān)視文件完整性 |
Heartbeat | 通過主動探測監(jiān)控服務的可用性(心跳) |
在本教程中逸嘀,我們將使用Filebeat將本地日志轉發(fā)到我們的Elastic Stack。
使用apt安裝Filebeat:
sudo apt install filebeat
接下來允粤,配置Filebeat以連接到Logstash崭倘。 在這里,我們將修改Filebeat附帶的示例配置文件类垫。
打開Filebeat配置文件:
sudo nano /etc/filebeat/filebeat.yml
注意:與Elasticsearch一樣司光,F(xiàn)ilebeat的配置文件采用YAML格式。 這意味著正確的縮進至關重要悉患,因此請務必使用這些說明中指示的相同數(shù)量的空格飘庄。
Filebeat支持多種輸出,但您通常只將事件直接發(fā)送到Elasticsearch或Logstash以進行其他處理购撼。 在本教程中,我們將使用Logstash對Filebeat收集的數(shù)據(jù)執(zhí)行其他處理谴仙。 Filebeat不需要直接向Elasticsearch發(fā)送任何數(shù)據(jù)迂求,所以讓我們禁用該輸出。 為此晃跺,找到output.elasticsearch部分揩局,并在#前面注釋掉以下行:
/etc/filebeat/filebeat.yml
...
#output.elasticsearch:
# Array of hosts to connect to.
#hosts: ["xx.xx.xx.xx:9200"]
...
然后,配置output.logstash部分掀虎。 取消注釋行output.logstash:和hosts: ["xx.xx.xx.xx:5044"]刪除# 凌盯。 這將配置Filebeat連接到Elastic Stack服務器上端口5044的Logstash,我們之前為其指定了Logstash輸入的端口:
/etc/filebeat/filebeat.yml
output.logstash:
# The Logstash hosts
hosts: ["xx.xx.xx.xx:5044"]
保存并關閉文件烹玉。
Filebeat的功能可以使用Filebeat模塊進行擴展驰怎。 在本教程中,我們將使用系統(tǒng)模塊二打,nginx模塊县忌。
啟用模塊 | 說明 |
---|---|
system | 收集和解析由常見Linux發(fā)行版的系統(tǒng)日志記錄服務創(chuàng)建的日志 |
nginx | 收集和解析由常見nginx日志記錄 |
讓我們啟用它:
sudo filebeat modules enable system
sudo filebeat modules enable nginx
您可以通過運行以下命令查看已啟用和已禁用模塊的列表:
sudo filebeat modules list
您將看到類似于以下內容的列表:
Enabled:
system
nginx
Disabled:
apache2
auditd
elasticsearch
icinga
iis
kafka
kibana
logstash
mongodb
mysql
osquery
postgresql
redis
traefik
默認情況下,F(xiàn)ilebeat配置為使用syslog和授權日志的默認路徑。 對于本教程症杏,您無需更改配置中的任何內容装获。 您可以在/etc/filebeat/modules.d/system.yml配置文件中查看模塊的參數(shù)。
接下來厉颤,將索引模板加載到Elasticsearch中穴豫。 Elasticsearch索引是具有類似特征的文檔集合。 索引用名稱標識逼友,用于在其中執(zhí)行各種操作時引用索引精肃。 創(chuàng)建新索引時,將自動應用索引模板翁逞。
要加載模板肋杖,請使用以下命令:
sudo filebeat setup --template -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["xx.xx.xx.xx:9200"]'
您將看到如下所示的輸出:
Loaded index template
Filebeat附帶了示例Kibana儀表板,允許您在Kibana中可視化Filebeat數(shù)據(jù)挖函。 在使用儀表板之前状植,您需要創(chuàng)建索引模式并將儀表板加載到Kibana中。
在儀表板加載時怨喘,F(xiàn)ilebeat連接到Elasticsearch以檢查版本信息津畸。 要在啟用Logstash時加載儀表板,您需要禁用Logstash輸出并啟用Elasticsearch輸出:
sudo filebeat setup -e -E output.logstash.enabled=false -E output.elasticsearch.hosts=['xx.xx.xx.xx:9200'] -E setup.kibana.host=xx.xx.xx.xx:5601
您將看到如下所示的輸出:
2018-09-10T08:39:15.844Z INFO instance/beat.go:273 Setup Beat: filebeat; Version: 6.4.2
2018-09-10T08:39:15.845Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200
2018-09-10T08:39:15.845Z INFO pipeline/module.go:98 Beat name: elk
2018-09-10T08:39:15.845Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200
2018-09-10T08:39:15.849Z INFO elasticsearch/client.go:708 Connected to Elasticsearch version 6.4.2
2018-09-10T08:39:15.856Z INFO template/load.go:129 Template already exists and will not be overwritten.
Loaded index template
Loading dashboards (Kibana must be running and reachable)
2018-09-10T08:39:15.857Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200
2018-09-10T08:39:15.865Z INFO elasticsearch/client.go:708 Connected to Elasticsearch version 6.4.2
2018-09-10T08:39:15.865Z INFO kibana/client.go:113 Kibana url: http://localhost:5601
2018-09-10T08:39:45.357Z INFO instance/beat.go:659 Kibana dashboards successfully loaded.
Loaded dashboards
2018-09-10T08:39:45.358Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200
2018-09-10T08:39:45.361Z INFO elasticsearch/client.go:708 Connected to Elasticsearch version 6.4.2
2018-09-10T08:39:45.361Z INFO kibana/client.go:113 Kibana url: http://localhost:5601
2018-09-10T08:39:45.455Z WARN fileset/modules.go:388 X-Pack Machine Learning is not enabled
Loaded machine learning job configurations
現(xiàn)在您可以啟動并啟用Filebeat:
sudo systemctl start filebeat
sudo systemctl enable filebeat
如果您正確設置了Elastic Stack必怜,F(xiàn)ilebeat將開始將您的系統(tǒng)日志和授權日志發(fā)送到Logstash肉拓,Logstash會將該數(shù)據(jù)加載到Elasticsearch中。
要驗證Elasticsearch是否確實正在接收此數(shù)據(jù)梳庆,請使用以下命令查詢Filebeat索引:
curl -XGET 'http://xx.xx.xx.xx:9200/filebeat-*/_search?pretty'
您將看到與此類似的輸出:
...
{
"took" : 32,
"timed_out" : false,
"_shards" : {
"total" : 3,
"successful" : 3,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 1641,
"max_score" : 1.0,
"hits" : [
{
"_index" : "filebeat-6.4.2-2018.10.10",
"_type" : "doc",
"_id" : "H_bZ62UBB4D0uxFRu_h3",
"_score" : 1.0,
"_source" : {
"@version" : "1",
"message" : "Oct 10 06:22:36 elk systemd[1]: Reached target Local File Systems (Pre).",
"@timestamp" : "2018-10-10T08:43:56.969Z",
"host" : {
"name" : "elk"
},
"source" : "/var/log/syslog",
"input" : {
"type" : "log"
},
"tags" : [
"beats_input_codec_plain_applied"
],
"offset" : 296,
"prospector" : {
"type" : "log"
},
"beat" : {
"version" : "6.4.2",
"hostname" : "elk",
"name" : "elk"
}
}
},
...
如果您的輸出顯示總命中數(shù)為0暖途,則Elasticsearch不會在您搜索的索引下加載任何日志,您需要檢查設置是否有錯誤膏执。 如果您收到了預期的輸出驻售,請繼續(xù)執(zhí)行下一步,我們將在其中了解如何瀏覽Kibana的一些儀表板更米。
第 5 步 - 探索Kibana儀表板
讓我們看看我們之前安裝的Web界面Kibana欺栗。
在Web瀏覽器中,轉到Elastic Stack服務器的FQDN或公共IP地址征峦。 輸入您在第2步中定義的登錄憑據(jù)后迟几,您將看到Kibana主頁:
單擊左側導航欄中的“ 發(fā)現(xiàn)”鏈接。 在“ 發(fā)現(xiàn)”頁面上栏笆,選擇預定義的filebeat- *索引模式以查看Filebeat數(shù)據(jù)类腮。 默認情況下,這將顯示過去15分鐘內的所有日志數(shù)據(jù)蛉加。 您將看到包含日志事件的直方圖存哲,以及下面的一些日志消息:
在這里因宇,您可以搜索和瀏覽日志,還可以自定義儀表板祟偷。 但是察滑,此時不會有太多因為您只從Elastic Stack服務器收集系統(tǒng)日志。
使用左側面板導航到Dashboard頁面并搜索Filebeat System儀表板修肠。 在那里贺辰,您可以搜索Filebeat system模塊附帶的示例儀表板。
例如嵌施,您可以根據(jù)系統(tǒng)日志消息查看詳細的統(tǒng)計信息:
Kibana還有許多其他功能饲化,例如圖形和過濾功能,因此您可以隨意瀏覽吗伤。
第 4 部分 總結
在本文中吃靠,您學習了如何安裝和配置Elastic Stack以收集和分析系統(tǒng)日志。 請記住足淆,您可以使用Beats將任何類型的日志或索引數(shù)據(jù)發(fā)送到Logstash巢块,但如果使用Logstash過濾器對數(shù)據(jù)進行解析和結構化,則數(shù)據(jù)變得更加有用巧号,因為這會將數(shù)據(jù)轉換為可讀取的一致格式很容易通過Elasticsearch族奢。