Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

これは 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プラグインで、お手軽に確認します。

elasticsearch-head.png

ちゃんと入ってますね。

では、次に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


ちゃんと入ってますね。

vminfo.png

まとめ

powershellは非常に強力でwindows環境でのデータ収集、加工に非常に優れています。様々なしがらみにより、windows環境はまだまだ残っているのではないかと思います。そこえで、powershellを使用することによりelasticsearchに様々なデータを入れることが可能、様々な状態の可視化が可能になります。

winodws環境の管理をされている方は一度お試ししてはいかがでしょうか?

補足

elasticsearch version "1.0.2"で動作確認。version上げねば、、、

toshi_miura
インフラよりです。最近はVmware主体。Chromeのエクステンション書いたり、自炊の整理(バーコード分析、WebAPI)とかもやったりしてます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away