filebeats でNginxのログを確認する
Ingest nodeと、FileBeatのモジュールがで利用できるようになって、とりあえず小規模でとりあえず導入するような構成ならLogstashとか、Fluentd無しのFilebeat + Elasticsearch + Kibanaの構成でなんとかなるんじゃ無いかと試してみる。
ある程度以上の規模になったり、欠損が許容されないような場合は、Logstashとか、FluentdのようなAggregatorを間に挟んだほうが当然良いと思う。
Filebeatsをインストールする
公式サイトのインストール方法を参考にインストールする。
Nginx Moduleで出力するIndexを分ける
たとえばNginx用のIndexを分ける場合は以下のような設定をする。
prospectorでfield を追加して、output側で特定の条件(fields.typeが"accesslog"の場合)にnginx-%{+yyyy.MM.dd}という indexに送信するとしている。
ただし、nginx.access.geoipのマッピングをする必要が出てくるので、特に問題がなければデフォルトで提供されているfilebeat-* のIndexを使う方が手間は少ない。
filebeat.modules: - module: nginx # Access logs access: enabled: true var.paths: - /var/log/nginx/access.log prospector: fields: type: accesslog # Error logs error: enabled: true var.paths: - /var/log/nginx/error.log prospector: fields: type: "accesslog" output.elasticsearch: enabled: true hosts: ["リモートホスト:9200"] index: "filebeat-%{+yyyy.MM.dd}" indices: - index: "nginx-%{+yyyy.MM.dd}" when.equals: fields.type: "accesslog"
Nginx ModuleとSyslog Moduleで出力するIndexを分ける
Nginx Moduleはデフォルトのfilebeat-* に出力し、Syslog Moduleの出力先のみ変更する。
filebeat.modules: - module: system # Syslog syslog: enabled: true var.paths: ["/var/log/secure"] prospector: fields: app: "syslog" filebeat.modules: - module: nginx # Access logs access: enabled: true var.paths: - /var/log/nginx/access.log # Error logs error: enabled: true var.paths: - /var/log/nginx/error.log output.elasticsearch: enabled: true hosts: ["リモートホスト:9200"] index: "filebeat-%{+yyyy.MM.dd}" indices: - index: "syslog-%{+yyyy.MM.dd}" when.equals: fields.app: "syslog" - index: "filebeat-%{+yyyy.MM.dd}" default:
結論
デフォルトで用意されているDashboardは、一からダッシュボードを作らなくて良いのでこんなことが出来るというという取っ掛かりには良い。 filebeat-* になんでも入れると、ダッシュボードが上手く動かないとか出て来るので最低限でもモジュール単位ぐらいでは Index を分けたくなるが、そのあたりを filebeat だけでやる情報が中々なくて手間取ったが、そこそこ使える感じにはなった。 比較的小規模でAWSなどでCPUクレジットがあるようなインスタンスを使っている場合は、filebeatだけで済むのでCPU負荷が低くてすむという利点もある。