esxcli を使用したログフィルタリングの構成

Share on:

Table of contents

概要

ESXi 7.0 Update 2 以降では /etc 配下の多くのファイルが読み取り専用となっていますが、その中にはログのフィルタを記載する logfilters ファイルも含まれています。

ESXi configuration files for sfcb snmp and wbem can no longer be edited (82638)

The ESXi configuration files /etc/sfcb/sfcb.cfg, /etc/vmware/snmp.xml, /etc/vmsyslog.conf, /etc/vmware/logfilters and /etc/vmsyslog.conf.d/*.conf can no longer be edited. It is no longer possible to make changes to snmp, sfcb/wbem, or syslog by editing these config files. From ESXi 7.0 Update 2, files under /etc are read-only and edits do not persist across reboot.

2022/02/04 時点では VMware Docs 上は従来の logfilters 直接編集の手順のみでしたが、最新リリースではこちらの方法が使えません。このため、esxcli コマンドで設定を行っていきます。

ESXi ホストのログ フィルタリングの構成

使用する esxcli コマンド

ログフィルタの構成には esxcli system syslog config logfilter コマンドを使用します。

1# esxcli system syslog config logfilter
2Usage: esxcli system syslog config logfilter {cmd} [cmd options]
3
4Available Commands:
5  add                   Add a log filter.
6  get                   Show the current log filter configuration values.
7  list                  Show the added log filters.
8  remove                Remove a log filter.
9  set                   Set log filtering configuration options.

ログフィルタの有効化

esxcli system syslog config logfilter set の –log-filtering-enabled オプションを true として実行することで有効化が可能です。

 1# esxcli system syslog config logfilter set --help
 2Usage: esxcli system syslog config logfilter set [cmd options]
 3
 4Description:
 5  set                   Set log filtering configuration options.
 6
 7Cmd options:
 8  --log-filtering-enabled=<bool>
 9                        Enable or disable log filtering. (required)
10
11# esxcli system syslog config logfilter set --log-filtering-enabled=true
12# esxcli system syslog config logfilter get
13   Log Filtering Enabled: true

フィルタリング対象とするログ

ホームラボの Intel NUC10 + USB-SSD で以下の vmkusb ドライバの警告が多数出ていましたが、私の見えている範囲での問題は発生していなさそうでしたので、今回はこちらを対象にフィルタリングしていきます。

12022-01-17T13:51:09.987Z cpu0:1049017)WARNING: vmkusb: transfer error [22]: endpt = 0x81, nframes = 1, timeout = 0, interval = 0, max_packet_size = 1024, max_frame_size = 16384: Broken pipe

なお、ホームラボかつ NUC はサポート外ハードウェアですので、あくまでも「実験用だから何してもいいだろう」との前提のもとでフィルタリング対象としています。上述のログが実際に何らかの問題を示すものかそうでないかの判断基準などは本記事の対象外ですので予めご承知おきください。

実際にログをフィルタリングする場合には、誤って障害調査に必要なログをフィルタリングしないよう十分な検証を実施した上で、ログへの出力が不要であると判断した段階でフィルタリングを実施するようお願いします。

ログフィルタのエントリの作成

ログフィルタのエントリは “numLogs | ident | logRegexp” のフォーマットになっています。

ESXi ホストのログ フィルタリングの構成

まず numLogs です。今回の記事では該当のログは一切登録させないようにするため numLogs は 0 とします。

次に ident です。/etc/vmsyslog.conf.d/vmkernel.conf を確認すると、vmkernel.log には vmkernel, vmkwarning, vmkalert の3種類の ident のログが記録されることが分かります。今回はログの冒頭に WARNING とあるため ident は vmkwarning が指定されていると推測できます。

1# cat /etc/vmsyslog.conf.d/vmkernel.conf
2[vmsyslog-logger]
3id=vmkernel
4fclass=FileLoggerMessageOnly
5idents=vmkernel,vmkwarning,vmkalert
6nclass=NetworkFilterVmkernelTimestamp
7descr=vmkernel logs
8file=vmkernel
9size=10240

なお、ログのどのメッセージがどの ident か網羅された情報は無さそうでした。このため、上述のログの ident が本当に vmkwarning かどうかは実際のログフィルタリングを行って実機確認をしています。

3つ目に logRegexp です。logRegexp はフィルタリング対象のログがマッチする正規表現を指定します。今回は正規表現の効率は度外視で単純に以下のようにしました。

1vmkusb: transfer error .*: endpt = 0x81

最後にこれらを組み合わせたものが以下です。

10 | vmkwarning | vmkusb: transfer error .*: endpt = 0x81

ログフィルタの追加

上述のエントリを esxcli system syslog config logfilter add の -f オプションに指定してログフィルタを追加します。

1# esxcli system syslog config logfilter add -f "0 | vmkwarning | vmkusb: transfer error .*: endpt = 0x81"
2# esxcli system syslog config logfilter list
3Filter
4------
50 | vmkwarning | vmkusb: transfer error .*: endpt = 0x81
6# esxcli system syslog reload

esxcli system syslog reload で syslog 構成をリロードし反映させるのを忘れずに。