閱讀945 返回首頁    go 阿裏雲 go 技術社區[雲棲]


如何在 CentOS 7 上安裝 Elastic Stack

Elasticsearch 是基於 Lucene 由 Java 開發的開源搜索引擎。它提供了一個分布式、多租戶的全文搜索引擎(LCTT 譯注:多租戶是指多租戶技術,是一種軟件架構技術,用來探討與實現如何在多用戶的環境下共用相同的係統或程序組件,並且仍可確保各用戶間數據的隔離性。),並帶有 HTTP 儀表盤的 Web 界麵(Kibana)。數據會被 Elasticsearch 查詢、檢索,並且使用 JSON 文檔方案存儲。Elasticsearch 是一個可擴展的搜索引擎,可用於搜索所有類型的文本文檔,包括日誌文件。Elasticsearch 是 Elastic Stack 的核心,Elastic Stack 也被稱為 ELK Stack。

Logstash 是用於管理事件和日誌的開源工具。它為數據收集提供實時傳遞途徑。 Logstash 將收集您的日誌數據,將數據轉換為 JSON 文檔,並將其存儲在 Elasticsearch 中。

Kibana 是 Elasticsearch 的開源數據可視化工具。Kibana 提供了一個漂亮的儀表盤 Web 界麵。 你可以用它來管理和可視化來自 Elasticsearch 的數據。 它不僅美麗,而且強大。

在本教程中,我將向您展示如何在 CentOS 7 服務器上安裝和配置 Elastic Stack 以監視服務器日誌。 然後,我將向您展示如何在操作係統為 CentOS 7 和 Ubuntu 16 的客戶端上安裝 “Elastic beats”。

前提條件

  • 64 位的 CentOS 7,4 GB 內存 - elk 主控機
  • 64 位的 CentOS 7 ,1 GB 內存 - 客戶端 1
  • 64 位的 Ubuntu 16 ,1 GB 內存 - 客戶端 2

步驟 1 - 準備操作係統

在本教程中,我們將禁用 CentOS 7 服務器上的 SELinux。 編輯 SELinux 配置文件。


  1. vim /etc/sysconfig/selinux

將 SELINUX 的值從 enforcing 改成 disabled 。


  1. SELINUX=disabled

然後重啟服務器:


  1. reboot

再次登錄服務器並檢查 SELinux 狀態。


  1. getenforce

確保結果是 disabled

步驟 2 - 安裝 Java

部署 Elastic stack 依賴於Java,Elasticsearch 需要 Java 8 版本,推薦使用 Oracle JDK 1.8 。我將從官方的 Oracle rpm 包安裝 Java 8。

使用 wget 命令下載 Java 8 的 JDK。


  1. wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http:%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "https://download.oracle.com/otn-pub/java/jdk/8u77-b02/jdk-8u77-linux-x64.rpm"

然後使用 rpm 命令安裝:


  1. rpm -ivh jdk-8u77-linux-x64.rpm

最後,檢查 java JDK 版本,確保它正常工作。


  1. java -version

您將看到服務器的 Java 版本。

步驟 3 - 安裝和配置 Elasticsearch

在此步驟中,我們將安裝和配置 Elasticsearch。 從 elastic.co 網站提供的 rpm 包安裝 Elasticsearch,並將其配置運行在 localhost 上(以確保該程序安全,而且不能從外部訪問)。

在安裝 Elasticsearch 之前,將 elastic.co 的密鑰添加到服務器。


  1. rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

接下來,使用 wget 下載 Elasticsearch 5.1,然後安裝它。


  1. wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.1.1.rpm
  2. rpm -ivh elasticsearch-5.1.1.rpm

Elasticsearch 已經安裝好了。 現在進入配置目錄編輯 elasticsaerch.yml 配置文件。


  1. cd /etc/elasticsearch/
  2. vim elasticsearch.yml

去掉第 40 行的注釋,啟用 Elasticsearch 的內存鎖。這將禁用 Elasticsearch 的內存交換。


  1. bootstrap.memory_lock: true

在 Network 塊中,取消注釋 network.host 和 http.port 行。


  1. network.host: localhost
  2. http.port: 9200

保存文件並退出編輯器。

現在編輯 elasticsearch.service 文件的內存鎖配置。


  1. vim /usr/lib/systemd/system/elasticsearch.service

去掉第 60 行的注釋,確保該值為 unlimited


  1. MAX_LOCKED_MEMORY=unlimited

保存並退出。

Elasticsearch 配置到此結束。Elasticsearch 將在本機的 9200 端口運行,我們通過在 CentOS 服務器上啟用mlockall 來禁用內存交換。重新加載 systemd,將 Elasticsearch 置為開機啟動,然後啟動服務。


  1. sudo systemctl daemon-reload
  2. sudo systemctl enable elasticsearch
  3. sudo systemctl start elasticsearch

等待 Eelasticsearch 啟動成功,然後檢查服務器上打開的端口,確保 9200 端口的狀態是 LISTEN


  1. netstat -plntu

Check elasticsearch running on port 9200

然後檢查內存鎖以確保啟用 mlockall,並使用以下命令檢查 Elasticsearch 是否正在運行。


  1. curl -XGET 'localhost:9200/_nodes?filter_path=**.mlockall&pretty'
  2. curl -XGET 'localhost:9200/?pretty'

會看到如下結果。

Check memory lock elasticsearch and check status

步驟 4 - 安裝和配置 Kibana 和 Nginx

在這一步,我們將在 Nginx Web 服務器上安裝並配置 Kibana。 Kibana 監聽在 localhost 上,而 Nginx 作為 Kibana 的反向代理。

用 wget 下載 Kibana 5.1,然後使用 rpm 命令安裝:


  1. wget https://artifacts.elastic.co/downloads/kibana/kibana-5.1.1-x86_64.rpm
  2. rpm -ivh kibana-5.1.1-x86_64.rpm

編輯 Kibana 配置文件。


  1. vim /etc/kibana/kibana.yml

去掉配置文件中 server.portserver.host 和 elasticsearch.url 這三行的注釋。


  1. server.port: 5601
  2. server.host: "localhost"
  3. elasticsearch.url: "https://localhost:9200"

保存並退出。

將 Kibana 設為開機啟動,並且啟動 Kibana 。


  1. sudo systemctl enable kibana
  2. sudo systemctl start kibana

Kibana 將作為 node 應用程序運行在端口 5601 上。


  1. netstat -plntu

Kibana running as node application on port 5601

Kibana 安裝到此結束。 現在我們需要安裝 Nginx 並將其配置為反向代理,以便能夠從公共 IP 地址訪問 Kibana。

Nginx 在 Epel 資源庫中可以找到,用 yum 安裝 epel-release。


  1. yum -y install epel-release

然後安裝 Nginx 和 httpd-tools 這兩個包。


  1. yum -y install nginx httpd-tools

httpd-tools 軟件包包含 Web 服務器的工具,可以為 Kibana 添加 htpasswd 基礎認證。

編輯 Nginx 配置文件並刪除 server {} 塊,這樣我們可以添加一個新的虛擬主機配置。


  1. cd /etc/nginx/
  2. vim nginx.conf

刪除 server { } 塊。

Remove Server Block on Nginx configuration

保存並退出。

現在我們需要在 conf.d 目錄中創建一個新的虛擬主機配置文件。 用 vim 創建新文件 kibana.conf


  1. vim /etc/nginx/conf.d/kibana.conf

複製下麵的配置。


  1. server {
  2. listen 80;
  3. server_name elk-stack.co;
  4. auth_basic "Restricted Access";
  5. auth_basic_user_file /etc/nginx/.kibana-user;
  6. location / {
  7. proxy_pass http://localhost:5601;
  8. proxy_http_version 1.1;
  9. proxy_set_header Upgrade $http_upgrade;
  10. proxy_set_header Connection 'upgrade';
  11. proxy_set_header Host $host;
  12. proxy_cache_bypass $http_upgrade;
  13. }
  14. }

保存並退出。

然後使用 htpasswd 命令創建一個新的基本認證文件。


  1. sudo htpasswd -c /etc/nginx/.kibana-user admin
  2. “輸入你的密碼”

測試 Nginx 配置,確保沒有錯誤。 然後設定 Nginx 開機啟動並啟動 Nginx。


  1. nginx -t
  2. systemctl enable nginx
  3. systemctl start nginx

Add nginx virtual host configuration for Kibana Application

步驟 5 - 安裝和配置 Logstash

在此步驟中,我們將安裝 Logstash,並將其配置為:從配置了 filebeat 的 logstash 客戶端裏集中化服務器的日誌,然後過濾和轉換 Syslog 數據,並將其移動到存儲中心(Elasticsearch)中。

下載 Logstash 並使用 rpm 進行安裝。


  1. wget https://artifacts.elastic.co/downloads/logstash/logstash-5.1.1.rpm
  2. rpm -ivh logstash-5.1.1.rpm

生成新的 SSL 證書文件,以便客戶端可以識別 elastic 服務端。

進入 tls 目錄並編輯 openssl.cnf 文件。


  1. cd /etc/pki/tls
  2. vim openssl.cnf

在 [v3_ca] 部分添加服務器標識。


  1. [ v3_ca ]
  2. # Server IP Address
  3. subjectAltName = IP: 10.0.15.10

保存並退出。

使用 openssl 命令生成證書文件。


  1. openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout /etc/pki/tls/private/logstash-forwarder.key -out /etc/pki/tls/certs/logstash-forwarder.crt

證書文件可以在 /etc/pki/tls/certs/ 和 /etc/pki/tls/private/ 目錄中找到。

接下來,我們會為 Logstash 創建新的配置文件。創建一個新的 filebeat-input.conf 文件來為 filebeat 配置日誌源,然後創建一個 syslog-filter.conf 配置文件來處理 syslog,再創建一個 output-elasticsearch.conf 文件來定義輸出日誌數據到 Elasticsearch。

轉到 logstash 配置目錄,並在 conf.d 子目錄中創建新的配置文件。


  1. cd /etc/logstash/
  2. vim conf.d/filebeat-input.conf

輸入配置,粘貼以下配置:


  1. input {
  2. beats {
  3. port => 5443
  4. ssl => true
  5. ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
  6. ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  7. }
  8. }

保存並退出。

創建 syslog-filter.conf 文件。


  1. vim conf.d/syslog-filter.conf

粘貼以下配置:


  1. filter {
  2. if [type] == "syslog" {
  3. grok {
  4. match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
  5. add_field => [ "received_at", "%{@timestamp}" ]
  6. add_field => [ "received_from", "%{host}" ]
  7. }
  8. date {
  9. match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
  10. }
  11. }
  12. }

我們使用名為 grok 的過濾器插件來解析 syslog 文件。

保存並退出。

創建輸出配置文件 output-elasticsearch.conf


  1. vim conf.d/output-elasticsearch.conf

粘貼以下配置:


  1. output {
  2. elasticsearch { hosts => ["localhost:9200"]
  3. hosts => "localhost:9200"
  4. manage_template => false
  5. index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
  6. document_type => "%{[@metadata][type]}"
  7. }
  8. }

保存並退出。

最後,將 logstash 設定為開機啟動並且啟動服務。


  1. sudo systemctl enable logstash
  2. sudo systemctl start logstash

Logstash started on port 5443 with SSL Connection

步驟 6 - 在 CentOS 客戶端上安裝並配置 Filebeat

Beat 作為數據發送人的角色,是一種可以安裝在客戶端節點上的輕量級代理,將大量數據從客戶機發送到 Logstash 或 Elasticsearch 服務器。有 4 種 beat,Filebeat 用於發送“日誌文件”,Metricbeat 用於發送“指標”,Packetbeat 用於發送“網絡數據”,Winlogbeat 用於發送 Windows 客戶端的“事件日誌”。

在本教程中,我將向您展示如何安裝和配置 Filebeat,通過 SSL 連接將數據日誌文件傳輸到 Logstash 服務器。

登錄到客戶端1的服務器上。 然後將證書文件從 elastic 服務器複製到客戶端1的服務器上。


  1. ssh root@client1IP

使用 scp 命令拷貝證書文件。


  1. scp root@elk-serverIP:~/logstash-forwarder.crt .
  2. 輸入 elk-server 的密碼

創建一個新的目錄,將證書移動到這個目錄中。


  1. sudo mkdir -p /etc/pki/tls/certs/
  2. mv ~/logstash-forwarder.crt /etc/pki/tls/certs/

接下來,在客戶端 1 服務器上導入 elastic 密鑰。


  1. rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

下載 Filebeat 並且用 rpm 命令安裝。


  1. wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.1.1-x86_64.rpm
  2. rpm -ivh filebeat-5.1.1-x86_64.rpm

Filebeat 已經安裝好了,請轉到配置目錄並編輯 filebeat.yml 文件。


  1. cd /etc/filebeat/
  2. vim filebeat.yml

在第 21 行的路徑部分,添加新的日誌文件。 我們將創建兩個文件,記錄 ssh 活動的 /var/log/secure 文件 ,以及服務器日誌 /var/log/messages 。


  1. paths:
  2. - /var/log/secure
  3. - /var/log/messages

在第 26 行添加一個新配置來定義 syslog 類型的文件。


  1. document-type: syslog

Filebeat 默認使用 Elasticsearch 作為輸出目標。 在本教程中,我們將其更改為 Logshtash。 在 83 行和 85 行添加注釋來禁用 Elasticsearch 輸出。

禁用 Elasticsearch 輸出:


  1. #-------------------------- Elasticsearch output ------------------------------
  2. #output.elasticsearch:
  3. # Array of hosts to connect to.
  4. # hosts: ["localhost:9200"]

現在添加新的 logstash 輸出配置。 去掉 logstash 輸出配置的注釋,並將所有值更改為下麵配置中的值。


  1. output.logstash:
  2. # The Logstash hosts
  3. hosts: ["10.0.15.10:5443"]
  4. bulk_max_size: 1024
  5. ssl.certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]
  6. template.name: "filebeat"
  7. template.path: "filebeat.template.json"
  8. template.overwrite: false

保存文件並退出 vim。

將 Filebeat 設定為開機啟動並啟動。


  1. sudo systemctl enable filebeat
  2. sudo systemctl start filebeat

步驟 7 - 在 Ubuntu 客戶端上安裝並配置 Filebeat

使用 ssh 連接到服務器。


  1. ssh root@ubuntu-clientIP

使用 scp 命令拷貝證書文件。


  1. scp root@elk-serverIP:~/logstash-forwarder.crt .

創建一個新的目錄,將證書移動到這個目錄中。


  1. sudo mkdir -p /etc/pki/tls/certs/
  2. mv ~/logstash-forwarder.crt /etc/pki/tls/certs/

在服務器上導入 elastic 密鑰。


  1. wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

下載 Filebeat .deb 包並且使用 dpkg 命令進行安裝。


  1. wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.1.1-amd64.deb
  2. dpkg -i filebeat-5.1.1-amd64.deb

轉到配置目錄並編輯 filebeat.yml 文件。


  1. cd /etc/filebeat/
  2. vim filebeat.yml

在路徑配置部分添加新的日誌文件路徑。


  1. paths:
  2. - /var/log/auth.log
  3. - /var/log/syslog

設定文檔類型為 syslog 。


  1. document-type: syslog

將下列幾行注釋掉,禁用輸出到 Elasticsearch。


  1. #-------------------------- Elasticsearch output ------------------------------
  2. #output.elasticsearch:
  3. # Array of hosts to connect to.
  4. # hosts: ["localhost:9200"]

啟用 logstash 輸出,去掉以下配置的注釋並且按照如下所示更改值。


  1. output.logstash:
  2. # The Logstash hosts
  3. hosts: ["10.0.15.10:5443"]
  4. bulk_max_size: 1024
  5. ssl.certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]
  6. template.name: "filebeat"
  7. template.path: "filebeat.template.json"
  8. template.overwrite: false

保存並退出 vim。

將 Filebeat 設定為開機啟動並啟動。


  1. sudo systemctl enable filebeat
  2. sudo systemctl start filebeat

檢查服務狀態:


  1. systemctl status filebeat

Filebeat is running on the client Ubuntu

步驟 8 - 測試

打開您的網絡瀏覽器,並訪問您在 Nginx 中配置的 elastic stack 域名,我的是“elk-stack.co”。 使用管理員密碼登錄,然後按 Enter 鍵登錄 Kibana 儀表盤。

Login to the Kibana Dashboard with Basic Auth

創建一個新的默認索引 filebeat-*,然後點擊“創建”按鈕。

Create First index filebeat for Kibana

默認索引已創建。 如果 elastic stack 上有多個 beat,您可以在“星形”按鈕上點擊一下即可配置默認 beat。

Filebeat index as default index on Kibana Dashboard

轉到 “發現” 菜單,您就可以看到 elk-client1 和 elk-client2 服務器上的所有日誌文件。

Discover all Log Files from the Servers

來自 elk-client1 服務器日誌中的無效 ssh 登錄的 JSON 輸出示例。

JSON output for Failed SSH Login

使用其他的選項,你可以使用 Kibana 儀表盤做更多的事情。

Elastic Stack 已安裝在 CentOS 7 服務器上。 Filebeat 已安裝在 CentOS 7 和 Ubuntu 客戶端上。

原文發布時間為:2017-04-29

本文來自雲棲社區合作夥伴“Linux中國”

最後更新:2017-05-19 14:07:21

  上一篇:go  Siri之父揭秘人工智能產品如何成功創造千億市場
  下一篇:go  阿裏感悟(十八)- 應屆生Review