構成/接続イメージ
適当なイメージ
FilebeatをWebサーバにインストールを行い、Logstashへログを転送する。
#filebeatからログを直接elasticserchへ送ることも可能だが、今回はfilebeat → Logstash → Elasticsearchの順に転送する流れとしている。
インストール環境
■可視化サーバ
- OS:CentOS7.4
- ElasticSearch 6.2
- Kibana 6.2
- Nginx 1.12.2
- Logstash 6.2
- Java: openjdk1.8.0 161
■Webサーバ(Apache)
- filebeat 6.2 ←今回追加
事前準備
Kibana /ElasticSearch /Logstash /Nginx の動作する環境を準備
Filebeat導入
yumでのインストールをrpmを取得したインストールの2つの方法がありそうがだ、
今回はyumで追加を行う。
■YUM repository
■パッケージダウンロード/インストール
Step1.インストール
Webサーバーにfilebeatをインストールを実施する。
パブリックキー取得 ※取得済みの場合は不要
[user@web ~]$ sudo rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
リポジトリ追加 ※作成済みの場合は不要
[user@web ~]$ sudo vi /etc/yum.repos.d/elastic.repo
■■■■ 追加 ■■■■
[elastic-6.x]
name=Elastic repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
■■■■■■■■■■■■■■■■■
filebeatインストール
[user@web ~]$ sudo yum install -y filebeat
Step2.設定
インストール後の設定(初期値)確認
初期の設定情報確認をしてみる
[user@web ~]$ sudo more /etc/filebeat/filebeat.yml | grep -v '^\s*#' | grep -v '^\s*$'
filebeat.prospectors:
- type: log
enabled: false
paths:
- /var/log/*.log
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 3
setup.kibana:
output.elasticsearch:
hosts: ["localhost:9200"]
filebeat.ymlのテンプレート修正
Filebeatの初期テンプレートはElasticsearch出力で使用できるためLogstashを使用するようにFilebeatをテンプレートを修正する
[user@web ~]$ vi /etc/filebeat/filebeat.yml
■■■■■ 修正 ■■■■■
filebeat.prospectors:
- input_type: log
paths:
- /var/log/httpd/access_log*
output.logstash:
hosts: ["192.168.20.176:5044"]
■■■■■■■■■■■■■■■■■■
構成ファイル(filebeat.yml)テスト
[user@web ~]$ sudo filebeat -configtest -e -c /etc/filebeat/filebeat.yml
Flag --configtest has been deprecated, configtest flag has been deprecated, use test config subcommand
2018-02-27T00:41:54.015+0900 INFO instance/beat.go:468 Home path: [/usr/share/filebeat] Config path: [/etc/filebeat] Data path: [/var/lib/filebeat] Logs path: [/var/log/filebeat]
2018-02-27T00:41:54.018+0900 INFO instance/beat.go:475 Beat UUID: bca4184a-e78d-41c0-be11-28ac704d5567
2018-02-27T00:41:54.018+0900 INFO instance/beat.go:213 Setup Beat: filebeat; Version: 6.2.2
2018-02-27T00:41:54.021+0900 INFO pipeline/module.go:76 Beat name: web.local
2018-02-27T00:41:54.022+0900 WARN [cfgwarn] instance/beat.go:283 DEPRECATED: -configtest flag has been deprecated, use configtest subcommand Will be removed in version: 6.0
Config OK
2018-02-27T00:41:54.022+0900 INFO [monitoring] log/log.go:97 Starting metrics logging every 30s
2018-02-27T00:41:54.025+0900 INFO [monitoring] log/log.go:132 Total non-zero metrics {"monitoring": {"metrics": {"beat":{"cpu":{"system":{"ticks":0,"time":7},"total":{"ticks":140,"time":149,"value":140},"user":{"ticks":140,"time":142}},"info":{"ephemeral_id":"452e3bc2-87bc-4025-89c1-bbc898fc6b35","uptime":{"ms":52}},"memstats":{"gc_next":4473924,"memory_alloc":2690480,"memory_total":2690480,"rss":11464704}},"filebeat":{"harvester":{"open_files":0,"running":0}},"libbeat":{"config":{"module":{"running":0}},"output":{"type":"logstash"},"pipeline":{"clients":0,"events":{"active":0}}},"registrar":{"states":{"current":0}},"system":{"cpu":{"cores":1},"load":{"1":0,"15":0.05,"5":0.01,"norm":{"1":0,"15":0.05,"5":0.01}}}}}}
2018-02-27T00:41:54.026+0900 INFO [monitoring] log/log.go:133 Uptime: 52.802986ms
2018-02-27T00:41:54.026+0900 INFO [monitoring] log/log.go:110 Stopping metrics logging.
[user@web log]$
Step3.filebeat起動
[user@web log]$ sudo systemctl daemon-reload
[user@web log]$ sudo systemctl start filebeat.service
[user@web log]$ sudo systemctl enable filebeat.service
Created symlink from /etc/systemd/system/multi-user.target.wants/filebeat.service to /usr/lib/systemd/system/filebeat.service.
[user@web log]$
Logstash設定変更
Step1.Logstash設定作成(filebeat連携用)
設定ファイル作成
inpoet :port 5044を開放してデータ転送の待ち受けポートとする。
filter:grokフィルタを使用して Apacheのアクセスログをフィールド毎に分割
Apacheのログのために、COMBINEDAPACHELOGが用意されているらしいので使ってみる。
output:elasticsearch の"localhost:9200"に出力する。
★設定ファイルの参考先★
[user@server001 ~]$ cd /etc/logstash/conf.d
[user@server001 conf.d]$ sudo vi 01-pipeline.conf
■■■■ 追加 ■■■■
input {
beats {
port => "5044"
}
}
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}"}
}
geoip {
source => "clientip"
}
}
output {
elasticsearch {
hosts => [ "localhost:9200" ]
}
}
■■■■■■■■■■■■■■■■
設定ファイルのテスト①
”--path.settings /etc/logstash”のオプションがない場合はWARNINGが出力されるみたい。
[user@server001 conf.d]$ sudo /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/01-pipeline.conf --config.test_and_exit
WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using --path.settings. Continuing using the defaults
Could not find log4j2 configuration at path /usr/share/logstash/config/log4j2.properties. Using default config which logs errors to the console
[INFO ] 2018-02-28 01:00:29.503 [main] scaffold - Initializing module {:module_name=>"fb_apache", :directory=>"/usr/share/logstash/modules/fb_apache/configuration"}
[INFO ] 2018-02-28 01:00:29.509 [main] scaffold - Initializing module {:module_name=>"netflow", :directory=>"/usr/share/logstash/modules/netflow/configuration"}
[WARN ] 2018-02-28 01:00:30.507 [LogStash::Runner] multilocal - Ignoring the 'pipelines.yml' file because modules or command line options are specified
Configuration OK
[INFO ] 2018-02-28 01:00:32.688 [LogStash::Runner] runner - Using config.test_and_exit mode. Config Validation Result: OK. Exiting Logstash
[user@server001 conf.d]$
設定ファイルのテスト②
[user@server001 conf.d]$ sudo /usr/share/logstash/bin/logstash --path.settings /etc/logstash -f /etc/logstash/conf.d/01-pipeline.conf --config.test_and_exit
Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties
Configuration OK
[user@server001 conf.d]$
Logstash実行
optionを "--config.reload.automatic" に変更する。
[user@server001 conf.d]$ sudo /usr/share/logstash/bin/logstash --path.settings /etc/logstash -f /etc/logstash/conf.d/01-pipeline.conf --config.reload.automatic
Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties
[user@elastic ~]$
kibanaでインポート結果確認
kibanaでの結果確認手順
①
左メニューの "Management" をクリック
②
Managementメニューの "Index Patterns " をクリック
③
左メニューの "Index pattern" に"logstash-*"入力
・Your index pattern can match any of your x indices, below.に表示されファイル名を入力でも可能
”Success! Your index pattern matches 1 index."が表示されると"NextStep"をクリックすることができるようになる。
④
Time Filter field nameには”@timestanp"を選択する。
⑤
左メニューのdiscoverをクリックする
⑥
”logstash-2018.02.27”を選ぶといい感じに表とグラフが出力される。
⑥’
表示項目をadd で追加すると色々な出力形式に変更ができる
Ex)kibanaの画面(JOSN情報)
COMBINEDAPACHELOGを使用すると以下のように分割れて登録されるみたい。
{
"_index": "logstash-2018.02.27",
"_type": "doc",
"_id": "JOBe2WEB4jh9j1cFRlJa",
"_version": 1,
"_score": null,
"_source": {
"tags": [
"beats_input_codec_plain_applied",
"_geoip_lookup_failure"
],
"referrer": "\"-\"",
"message": "192.168.20.3 - - [28/Feb/2018:01:40:51 +0900] \"GET /favicon.ico HTTP/1.1\" 200 - \"-\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64; Trident/7.0; rv:11.0) like Gecko\"",
"request": "/favicon.ico",
"beat": {
"name": "webserver",
"hostname": "webserver",
"version": "6.2.2"
},
"offset": 8406,
"@version": "1",
"agent": "\"Mozilla/5.0 (Windows NT 10.0; Win64; x64; Trident/7.0; rv:11.0) like Gecko\"",
"timestamp": "28/Feb/2018:01:40:51 +0900",
"clientip": "192.168.20.3",
"ident": "-",
"auth": "-",
"verb": "GET",
"geoip": {},
"response": "200",
"httpversion": "1.1",
"@timestamp": "2018-02-27T16:40:59.083Z",
"host": "webserver",
"source": "/var/log/httpd/access_log"
},
"fields": {
"@timestamp": [
"2018-02-27T16:40:59.083Z"
]
},
"sort": [
1519749659083
]
}