ELK 單機部署,多 beat 節點

參考文章

適用場景:多個項目或服務,獨立部署,各個服務有自己的 log 文件。爲便於查看、過濾等,可單機部署 ELK 服務後,各個服務通過 filebeat 服務將 log 發送至 ELK 機器。

在這裏插入圖片描述

一、安裝 java

$ sudo yum install java

$ java -version
openjdk version "11.0.5" 2019-10-15 LTS
OpenJDK Runtime Environment Corretto-11.0.5.10.1 (build 11.0.5+10-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.5.10.1 (build 11.0.5+10-LTS, mixed mode)

對於 elasticsearch、logstash 和 kibana,Elastic.co 都提供了多種環境的安裝方式,這裏只介紹通過 RPM 的方式,其他環境可參考官網文檔

二、安裝 elasticsearch

  1. 下載安裝公鑰。
    $ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
    
  2. 增加 yum 源。在 /etc/yum.repos.d/ 創建文件 elasticsearch.repo 並寫入以下內容:
    [elasticsearch-7.x]
    name=Elasticsearch repository for 7.x packages
    baseurl=https://artifacts.elastic.co/packages/7.x/yum
    gpgcheck=1
    gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
    enabled=1
    autorefresh=1
    type=rpm-md
    
  3. 安裝、啓動
    $ sudo yum install elasticsearch
    
    $ sudo systemctl daemon-reload
    
    $ sudo systemctl enable elasticsearch.service
    Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
    
    $ sudo systemctl start elasticsearch.service
    
    $ sudo systemctl | grep elasticsearch
    elasticsearch.service                                         loaded active running   Elasticsearch
    
    注意:elasticsearch 基於 java,默認佔用的最小內存是 1G,如果機器內存不夠啓動時會報錯 Not enough space,將 /etc/elasticsearch/jvm.options 中的 -Xms-Xmx 改小後重試即可。

三、安裝 logstash

  1. 下載安裝公鑰。如果上面執行過,可跳過。
    $ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
    
  2. 增加 yum 源。在 /etc/yum.repos.d/ 創建文件 logstash.repo 並寫入以下內容:
    [logstash-7.x]
    name=Elastic repository for 7.x packages
    baseurl=https://artifacts.elastic.co/packages/7.x/yum
    gpgcheck=1
    gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
    enabled=1
    autorefresh=1
    type=rpm-md
    
  3. 安裝
    $ sudo yum install logstash
    
    $ sudo systemctl daemon-reload
    
    $ sudo systemctl enable logstash.service
    Created symlink from /etc/systemd/system/multi-user.target.wants/logstash.service to /etc/systemd/system/logstash.service.
    
  4. 配置。在 /etc/logstash/conf.d/ 創建文件 beat2es.conf,並寫入以下內容:
    input {
        beats{
            port => 5044
            ssl => false
        }
    }
    filter {
        grok {
            match => { "message" => "%{TIMESTAMP_ISO8601:[@metadata][timestamp]} %{DATA:message}" }
            overwrite => [ "message" ]
        }
        date {
            match => [ "[@metadata][timestamp]" , "yyyy-MM-dd HH:mm:ss,SSS" ]
        }
    }
    output {
        elasticsearch {
            hosts => ["localhost:9200"]
            index => "%{[fields][appname]}-%{+YYYY.MM.dd}"
            sniffing => true
        }
    }
    
  5. 啓動
    $ sudo systemctl start logstash
    

四、安裝 kibana

  1. 下載安裝公鑰。如果上面執行過,可跳過。
    $ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
    
  2. 增加 yum 源。在 /etc/yum.repos.d/ 創建文件 kibana.repo 並寫入以下內容:
    [kibana-7.x]
    name=Kibana repository for 7.x packages
    baseurl=https://artifacts.elastic.co/packages/7.x/yum
    gpgcheck=1
    gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
    enabled=1
    autorefresh=1
    type=rpm-md
    
  3. 安裝、啓動
    $ sudo yum install kibana
    
    $ sudo systemctl daemon-reload
    
    $ sudo systemctl enable kibana.service
    Created symlink from /etc/systemd/system/multi-user.target.wants/kibana.service to /etc/systemd/system/kibana.service.
    
    $ sudo systemctl start kibana.service
    
至此,ELK 服務已經部署完成。logstash 監聽 5044 端口,所有發送到 5044 端口的內容都會傳送至 elasticsearch,可通過 kibana 可視化搜索頁面進行查詢。
kibana 默認部署在 locaohost:5601,爲了增加安全性,需通過 nginx 爲 kibana 設置用戶登陸訪問。
如果不需要安全性,可修改 /etc/kibana/kibana.yml 文件,將其中的 server.host 的值改爲 0.0.0.0 後重啓 kibana 服務,這樣外網可直接通過該機器的 5601 端口訪問 kibana 服務。

五、設置 kibana 登陸訪問

  1. 添加 nginx 源
    $ sudo rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
    
  2. 安裝 nginx
    $ sudo yum install nginx
    
  3. 配置 nginx。修改 /etc/nginx/conf.d/default.conf/ 路由的配置,如下:
    location / {
         auth_basic "secret";
         auth_basic_user_file /etc/nginx/db/passwd.db;
         proxy_pass http://localhost:5601;
         proxy_set_header Host $host:5601;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header Via "nginx";
      }
    
  4. 安裝 httpd
    $ sudo yum install httpd
    
  5. 設置用戶。用戶名:jack,密碼:123456
    $ sudo htpasswd -bc /etc/nginx/pwd.db jack 123456
    
  6. 啓動 nginx
    $ sudo systemctl nginx.service
    
至此,訪問該機器的 80 端口,通過用戶密碼驗證,即可訪問到 kibana 服務。

六、安裝 filebeat

filebeat 服務可安裝在任何有 log 文件的機器上,其實時監聽 log 文件,並將內容發送至 logstash 服務。

  1. 下載 rpm 文件,並安裝
    $ curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.4.2-x86_64.rpm
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100 22.7M  100 22.7M    0     0  24.8M      0 --:--:-- --:--:-- --:--:-- 24.8M
    
    $ sudo rpm -vi filebeat-7.4.2-x86_64.rpm
    Preparing packages...
    filebeat-7.4.2-1.x86_64
    
    $ filebeat version
    filebeat version 7.4.2 (amd64), libbeat 7.4.2 [15075156388b44390301f070960fd8aeac1c9712 built 2019-10-28 19:46:13 +0000 UTC]
    
  2. 配置。配置文件按模塊分爲了幾部分,如 Filebeat inputs、Filebeat modules、Outputs等,在這裏只需關心兩個模塊,一是 Filebeat inputs,另個爲 Outputs。
    Filebeat inputs 用來配置 Filebeat 服務所監聽、讀取的文件,以及讀取時的一些選項,這裏的文件,即爲 log 文件。
       * enabled: true 表示開啓
    
       * paths: 指定 log 文件的路徑
    
       * fields: 配置元數據,appname 爲必填項,用來區分不同項目
    
       * multiline.pattern: 正則表達式
    
       * multiline.negate: 是否反向。true 表示匹配 multiline.pattern 時開始新的一行;false 表示不匹配時開始新的一行
    
       * multiline.match: 連接的位置。after 表示不匹配 multiline.pattern 時連在上一句後面;before 表示連在下一句前面
    
       這 3 項用來設置多行識別,'^[0-9]{4}-[0-9]{2}-[0-9]{2}' 是識別,行首格式爲 YYYY-MM-DD 的日期,即每當行首爲該格式的日期時,如 2019-11-15,都會重新開始一行。
    
    Outputs 用來配置讀取到的內容,如何輸出。配置裏缺省的輸出方向是 Elasticsearch,這裏需要切換爲 Logstash。Logstash 的 SSL 目前尚未開啓,因此只需配置 hosts 即可。
       * hosts: ["{host}:5044"],logstash 服務所在的主機地址
    
    如無特殊需求,修改下面內容中的 pathsappname 以及 hosts,替換原 filebeat.yml 文件內容,即可。
       #=========================== Filebeat inputs =============================
     
    filebeat.inputs:
     
    - type: log
      enabled: true
      paths:
        - /var/log/app.log
      fields:
        appname: {your-app-name}
      multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
      multiline.negate: true
      multiline.match: after
     
    #============================= Filebeat modules ===============================
     
    filebeat.config.modules:
      # Glob pattern for configuration loading
      path: ${path.config}/modules.d/*.yml
     
      # Set to true to enable config reloading
      reload.enabled: false
     
    #==================== Elasticsearch template setting ==========================
     
    setup.template.settings:
      index.number_of_shards: 1
      #index.codec: best_compression
      #_source.enabled: false
     
    #================================ Outputs =====================================
     
    #----------------------------- Logstash output --------------------------------
    output.logstash:
      # The Logstash hosts
      hosts: ["{host}:5044"]
     
      # Optional SSL. By default is off.
      # List of root certificates for HTTPS server verifications
      #ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]
     
      # Certificate for SSL client authentication
      #ssl.certificate: "/etc/pki/client/cert.pem"
     
      # Client Certificate Key
      #ssl.key: "/etc/pki/client/cert.key"
     
    #================================ Processors =====================================
     
    processors:
      - add_host_metadata: ~
      - add_cloud_metadata: ~
    
  3. 啓動
    $ sudo systemctl enable filebeat.service
    
    $ sudo systemctl start filebeat.service
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章