はじめに #
ElasticSearchの新しいlog収集の仕組みである、Elastic Agentにはさまざまなデータソースからlogを簡単に収集するためのtemplateとしてIntegrationsという機能があります。
今回はvSphere Integrationを使ってみてどこまで実用的なのか触ってみます。
1. 検証環境の構築 #
vSphere Integrationを使うには事前にfleet-serverを構築している必要があります。構築方法は第1回を参照ください。
ただし今後fleet-serverにてESXi/vCenterのSyslogを収集できるように、TCPでSyslogを収集する場合は:514
、UDPなら:1514
を追加しておきます。
# https://github.com/deviantony/docker-elk/blob/629aea49616ae8a4184b5e68da904cb88e69831d/extensions/fleet/fleet-compose.yml#L35C1-L37C27
ports:
- 8220:8220
- 514:514 # for TCP
- 1514:1514 # for UDP
hostname: fleet-server
この理由はESXiのSyslog転送がfirewallにて:514
と:1514
しか許可されていないためです。参考サイト
$ esxcli network firewall ruleset rule list -r syslog
Ruleset Direction Protocol Port Type Port Begin Port End
------- --------- -------- --------- ---------- --------
syslog Outbound UDP Dst 514 514
syslog Outbound TCP Dst 514 514
syslog Outbound TCP Dst 1514 1514
2. vSphere Integrationの設定 #
fleet-serverがdeploy + kibanaに登録できたら、vSphere Integrationを利用することができます。
1. vSphere Integrationの追加
kibanaでvSphereと検索しIntegrationを追加します。
2. vSphere Integrateionの設定(log編)
Collect logs from vSphere via TCP/UDP
がESXi/vCenterのログを収集する設定です。
parameter | 説明 | 設定値 |
---|---|---|
TCP host to listen on | どのIP(eth)でlogを受信するか | とりあえず0.0.0.0で全てのethで受付する |
TCP port to listen on | どのportでlogを受信するか (default :9525 ) |
TCPなら514 UDPなら 1514 に変えておきます。 |
Preserve original event | parse前のmessageを保持するか | お好きに |
3 vSphere Integrateionの設定(metrics編)
Collect vSphere metrics
を有効にすると、vCenterからVMやESXiの性能情報を取得できます。
parameter | 説明 | 設定値 |
---|---|---|
Hosts | 収集先vCenter | https://<vCenterのIP>/sdk |
Username | ログインユーザー | 権限絞ったユーザーを設定するのが理想 |
Password | ログインパスワード | |
Don’t verify certificate chain | vCenterの証明書を検証を無効化 | 基本オレオレ証明書なのでONに |
4. fleet-serverに追加
新しくElastic Agentを構築するのが手間なので、今回はfleet-serverをAgentとして流用します。
従ってExisting hostsからFleet Server Policy
を選択します。
3. vCenterのmetrics確認 #
Integrationを使うと自動でDashboardが作成されるので、[Metrics VSphere] Hosts Overview
と[Metrics VSphere] VMs overview
等で取得したデータを確認することができます。
4. vCenterでsyslogの送付設定 #
vCenterのVAMI:5480
でアクセスすることで、Syslogの送付先を設定することができます。
VAMIからSyslogの送付先を先ほど設定したElastic Agent(今回はfleet-server)を選べばOK。 テストメッセージを送信していれば、以下文字列がlogから確認できます。
This is a diagnostic syslog test message from vCenter Server.
またlogはdatastream形式で保存されるので、data_stream.dataset : "vsphere.log"
等でvsphereのlogに絞り込めたり、process.name
で`収集したlogの種類(vpxd等)が自動でfield付けられているのが便利な点です。
5. ESXiでSyslogの送付設定 #
vSphere IntegrationはESXiのSyslog収集もできます。
1. ESXiのfirewallでSyslogを許可する。
esxcli network firewall ruleset set --ruleset-id=syslog --enabled=true
esxcli network firewall refresh
esxcli network firewall ruleset list | grep syslog
2. Syslogの設定を追加
# TCPの例
esxcli system syslog config set --loghost=tcp://<Elastic AgentのIP>:514
esxcli system syslog reload
esxcli system syslog config get | grep Remote
3. 実際にlog取得ができているか確認する
以下のようなQueryを実行することで、ESXiのログが取得できているか確認できます。
data_stream.dataset : "vsphere.log" and host.name : <ESXiのhost名>
おわりに #
試してみたけど実用性は微妙そう。。。
logの収集が簡単にできるのは非常に便利だが、本番環境レベルで使うにはElastic AgentとData streamsの仕組みを理解しlogのIndexやfieldの構造を知らないと難しい。 更に今までのBeatsと比べてElastic Agent由来のfieldが過剰に増えるので、通常のSyslogよりもデータ容量が大きくなっているはず。
metricsは収集データが少ないので集めてもしょうがない感じ。
結局vSphere単体ライセンスがなくなって、VCFに移行した結果「VMware Aria」が使えるようになったのでそちらに任せるのが良さそう。