Elasticsearchにpowershellからデータを投入してみよう


これは 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上げねば、、、