Logstash 的安裝設定與日誌的轉送

在 Ansible Automation Controller 可以將日誌發送到其他的日誌聚合主機上,目前支援的日誌類型有

  • Logstash
  • splunk
  • loggly
  • sumologic
  • other

這篇主要是說明 Logstash 該如何設置。

假設

這篇文章假設你已經架設好 ElasticSearch ,而且使用的是 RHEL8。

安裝 Logstash

首先是安裝 logstash,logstash 的安裝很簡單,新增 /etc/yum.repos.d/elasticsearch.repo

[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/oss-7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

輸入以下指令安裝 logstash

sudo yum install -y logstash

預設的 elasticsearch plugin 有版本匹配問題,需要改用 logstash-output-opensearch plugin

/usr/share/logstash/bin/logstash-plugin install logstash-output-opensearch

新增 /etc/logstash/conf.d/pipeline.conf

input {
  tcp {
    port => 5044
    codec => line
  }
}

filter {
  json {
    source => "message"
  }
}

output {
  opensearch {
    hosts => ["http://<elasticsearch_server>:9200"]
    index => "aap-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }
  stdout {}
}

設定說明如下

  • log 轉發的這類服務,都是以 pipeline 形式來設定,所以會有 input -> filter -> output
  • input 使用 TCP,並 listen 5044;codec 可以選 line 或 json,automation controller 送出的格式是 line。
  • filter 使用 json 來解析 message 這個欄位,因為 message 這欄位裡是 json 格式的字串。
  • output 輸出到 opensearch,index 指定為 aap-<日期> ;在 Kibana 裡建立索引時,就是使用 aap-* 來作為 pattern

設定完成後,啟用服務

systemctl enable --now logstash

啟動後要等一下,因為要啟動 JVM 來執行 JRuby,這段時間可以使用 journalctl 來檢查輸出

journalctl -u logstash -f

Automation controller 的設置

完成 Logstash 安裝與啟用以後,到 Automation Controller 裡,從左邊選「設置」,右邊選「日誌」,點選「編輯」

  • 日誌紀錄聚合器,填入主機名稱或是 IP
  • 日誌紀錄聚合器端口,填入 5044 ,這個 port 號碼就是前面 logstash 設定 input 裡所指定的。
  • 日誌紀錄聚合器類型,選擇 Logstash
  • 日誌紀錄聚合器協議,選擇 TCP

設定好以後,存檔,這樣就大功告成了。

參考資料