大家好,最近在設定 ELK 8.10 filebeat 串流 php 與 nginx log.
由於我這台機器,同時有 nginx 與 php
而我又想要用 filebeat module
這樣就可以直接幫我弄出 nginx 的 dashboard
我預期我的 index 會長這樣
nginx
php-backend
nodejs-frontend
原本的 filebeat.yaml 配置
output.elasticsearch:
hosts: ["localhost:9200"]
protocol: "https"
username: "elastic"
password: "我是密碼"
ssl.certificate_authorities: ["/etc/elasticsearch/certs/http_ca.crt"]
ssl.verification_mode: "certificate"
# setup.template.name: ""
# setup.template.pattern: ""
這樣設定的話,datastream 會生出一個 filebeat-8.10 的項目。
當只有一個 nginx 要處理的話
如果我要改成 index nginx,我就必須要這樣寫
output.elasticsearch:
hosts: ["localhost:9200"]
protocol: "https"
username: "elastic"
password: "我是密碼"
ssl.certificate_authorities: ["/etc/elasticsearch/certs/http_ca.crt"]
ssl.verification_mode: "certificate"
index: "nginx-%{+yyyy.dd.mm}"
setup.template.name: "nginx"
setup.template.pattern: "nginx-*"
但是現在我有三個 index 要處理。
這是我的 filebeat.yaml
filebeat.inputs:
- type: filestream
id: my-filestream-id
enabled: true
paths:
- /var/log/nginx/*-8081.log # 用來模擬 php 位置
tags: ["php"]
output.elasticsearch:
hosts: ["localhost:9200"]
protocol: "https"
username: "elastic"
password: "我是密碼"
ssl.certificate_authorities: ["/etc/elasticsearch/certs/http_ca.crt"]
ssl.verification_mode: "certificate"
indices:
- index: "php-backend"
when.contains:
tags: "php"
# setup.template.name: ""
# setup.template.pattern: ""
差別在 template.name 的地方,
如果只有一個 nginx,我可以在 filebeat.yml 制定 index_template name
但是當我有三個的時候,我現在是手動進去 kibana 把 php-backend index template 設定完成,然後 filebeat 如上面所示,我才能看到 datasteam 有我要的效果。
但是我希望能夠用 filebeat.yml 就直接控制 index_template anme,
這樣目前我這樣子的 nginx index 是 filebeat 自己產生的
而 php-backend 是我手動進去 kibana 設定的。
感覺很不對稱。同樣的設定檔,但是卻不同的方式建立 index_template.
(圖上的 filebeat 是文章的 nginx,只是我還沒改名稱)