これは Elasticsearch Advent Calendar 2014 - Qiita 、12日目の記事です。
##はじめに
皆さんは、どうのようにElasticsearchを使っていますか?
logstash、fluentdからのデータの投入だけではでなく、powershellからデータを投入できると、可視化できる範囲がぐっと広がります。
私の環境では、下記のような情報を可視化しています。
- vmwareの情報をpowershellから投入
- AWSの情報(ec2の稼働状態、cloudtrail)をpowershellから投入
- windowsのイベントログを投入
Elasticsearchには、様々なクライアントがありますがpowershellのクライアントはないため、関数を自作してみましたのでご紹介いたします。
使用例
Put-Elasticsearch という関数を作ってみました。
下記に、windowsのイベントログをelasticsearchに投入するサンプルを示します。
## event logの取得
$events = Get-EventLog system -newest 1000
## 投入用にオブジェクトを加工
## 一意キーとタイムスタンプを付与。(kibana上でタイムスタンプのフィールドは指定できるが、レコードごとに把握が面倒なため、「@timestamp」に統一)
$events | %{
$dateStr = Get-Date -Date $_.TimeGenerated | %{ $_.AddHours(-9) } | Get-Date -format s
$_ | Add-Member -MemberType NoteProperty -Name "@timestamp" -Value $dateStr | Out-Null
#複数回投入してもよいように、一意キーを決める
$_ | Add-Member -MemberType NoteProperty -Name "objKey" -Value ($_.MachineName+"_"+$_.Index) | Out-Null
}
Put-Elasticsearch -putDatas $events -bulk $script:bulk -index $script:index -elaHost $script:elaHost -port $script:port -type "winevent"
headプラグインで、お手軽に確認します。
ちゃんと入ってますね。
では、次にvmwareのAPIを使ってvmの情報を投入してみましょう。
vmのレコードには、ログレコードとは違い時間が含まれてないので、ある時間の状態として時間も渡します。
##モジュールのロード
Add-PSSnapin VMware.VimAutomation.* -ErrorAction SilentlyContinue
##ログイン
$vi = Connect-VIServer $sVCenter -User $sVCUser -Password $sVCPwd -ea silentlycontinue
##VMを取得して、余計なデータを落とす。リネームが必要なフィールドは適宜変換
$filterVm = Get-VM | select @{Name="vmid";Expression={$_.id}},NumCpu,MemoryMB ,@{Name="objKey";Expression={$_.id}}
## 時間情報をセットで渡す。分、秒等は切り捨て。
$date = Get-Date -Minute 0 -Second 0
Put-Elasticsearch -putDatas $filterVm -bulk $script:bulk -index $script:index -elaHost $script:elaHost -port $script:port -type "vmwarevm" -date $date
ちゃんと入ってますね。
まとめ
powershellは非常に強力でwindows環境でのデータ収集、加工に非常に優れています。様々なしがらみにより、windows環境はまだまだ残っているのではないかと思います。そこえで、powershellを使用することによりelasticsearchに様々なデータを入れることが可能、様々な状態の可視化が可能になります。
winodws環境の管理をされている方は一度お試ししてはいかがでしょうか?
補足
elasticsearch version "1.0.2"で動作確認。version上げねば、、、