はじめに
HerokuのLog Drainsを使ってSplunkにログ取り込んでみた
設定してみる
ということで、早速設定してみた
Splunkでログ受け取りの準備
インデックス作成(≒ Herokuのログを保存するディレクトリ)
Splunk GUIからheroku
インデックスを作成
※ GUIのスクリーンキャプチャは省略、代わりにGUI経由で作成される設定ファイル(*.conf)貼っときますね
[heroku]
coldPath = $SPLUNK_DB/heroku/colddb
enableDataIntegrityControl = 0
enableTsidxReduction = 0
homePath = $SPLUNK_DB/heroku/db
maxTotalDataSizeMB = 512000
thawedPath = $SPLUNK_DB/heroku/thaweddb
ソースタイプ作成
既定のソースタイプ syslog
からクローンして heroku:syslog
を作成
これもGUIから作成
[heroku:syslog]
DATETIME_CONFIG =
MAX_TIMESTAMP_LOOKAHEAD = 42
NO_BINARY_CHECK = true
REPORT-syslog = syslog-extractions
SHOULD_LINEMERGE = false
TIME_FORMAT = %Y-%m-%dT%H:%M:%S.%6N
TRANSFORMS = syslog-host
TZ = UTC
category = Application
description = Syslog Drain by Heroku
disabled = false
maxDist = 3
pulldown_type = 1
更新した箇所は MAX_TIMESTAMP_LOOKAHEAD
TIME_FORMAT
くらいかな
description
とか category
は適当でおk
データインプット作成
TCP 10514ポートでデータを受け取る
これもGUIからs (ry
[tcp://10514]
connection_host = dns
index = heroku
source = myherokuapp
sourcetype = heroku:syslog
index
と sourcetype
に先ほど設定したものを指定するのを忘れずに
HerokuでLog Drains設定
その前に...
Heroku CLIインストール
まだHeroku CLI入ってなかったので、Macにインストール
$ brew install heroku/brew/heroku
==> Tapping heroku/brew
Cloning into '/usr/local/Homebrew/Library/Taps/heroku/homebrew-brew'...
remote: Counting objects: 9, done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 9 (delta 0), reused 7 (delta 0), pack-reused 0
Unpacking objects: 100% (9/9), done.
Tapped 2 formulae (36 files, 23.6KB)
==> Installing heroku from heroku/brew
==> Installing dependencies for heroku/brew/heroku: heroku/brew/heroku-node
==> Installing heroku/brew/heroku dependency: heroku/brew/heroku-node
==> Downloading https://cli-assets.heroku.com/homebrew/node-8.7.0.tar.xz
######################################################################## 100.0%
🍺 /usr/local/Cellar/heroku-node/8.7.0: 3 files, 34MB, built in 6 seconds
==> Installing heroku/brew/heroku
==> Downloading https://cli-assets.heroku.com/homebrew/heroku-6.14.36.tar.xz
######################################################################## 100.0%
🍺 /usr/local/Cellar/heroku/6.14.36: 8,177 files, 43.5MB, built in 8 seconds
Log Drains設定
Splunkで作成したデータインプット(TCP 10514ポート)に投げるようにCLIで設定
$ heroku drains:add syslog://<splunk_ip>:10514 --app myherokuapp
以上!!
Splunkで検索してみる
Herokuのログがインデックスされてる
若干文字コードが合ってないのかな...? ここは要対応かも
とはいえ、ログはSplunkに貯めることができるので、これでアプリケーションの稼働状況とかHeroku利用状況を監視できそう
(おまけ)フィールド抽出
こんなフィールド抽出してみた
([^\s]+\s){3}(?P<token>[^\s]+)\s(?P<category>[^\s]+)\s(?<dyno>[^\s]+)\s([^\s]+\s){2}(?P<message>[\s\S]+$)
ログ行の先頭からスペース区切り4つ目がtoken
、5つ目がcategory
、6つ目がdyno
、9つ目がmessage
という感じ