如何在Ubuntu 18.04上安裝Elasticsearch,Logstash,Kibana,Filebeat

此過程是親自實踐過的磨确,一步步下來可成功安裝箕般,如有問題可以聯(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

第 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族奢。

第 5 部分 參考文獻

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末丹鸿,一起剝皮案震驚了整個濱河市越走,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌靠欢,老刑警劉巖廊敌,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異门怪,居然都是意外死亡庭敦,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門薪缆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人伞广,你說我怎么就攤上這事拣帽。” “怎么了嚼锄?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵减拭,是天一觀的道長。 經(jīng)常有香客問我区丑,道長拧粪,這世上最難降的妖魔是什么修陡? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮可霎,結果婚禮上魄鸦,老公的妹妹穿的比我還像新娘。我一直安慰自己癣朗,他們只是感情好拾因,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著旷余,像睡著了一般绢记。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上正卧,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天蠢熄,我揣著相機與錄音,去河邊找鬼炉旷。 笑死签孔,一個胖子當著我的面吹牛,可吹牛的內容都是我干的砾跃。 我是一名探鬼主播骏啰,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼抽高!你這毒婦竟也來了判耕?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤翘骂,失蹤者是張志新(化名)和其女友劉穎壁熄,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碳竟,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡草丧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了莹桅。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昌执。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖诈泼,靈堂內的尸體忽然破棺而出懂拾,到底是詐尸還是另有隱情,我是刑警寧澤铐达,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布岖赋,位于F島的核電站,受9級特大地震影響瓮孙,放射性物質發(fā)生泄漏唐断。R本人自食惡果不足惜选脊,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望脸甘。 院中可真熱鬧恳啥,春花似錦、人聲如沸斤程。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽忿墅。三九已至扁藕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疚脐,已是汗流浹背亿柑。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留棍弄,地道東北人望薄。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像呼畸,于是被迫代替她去往敵國和親痕支。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內容