IPMI
IPMI メトリクスには、監視対象デバイスの電流、電圧、消費電力、使用率、ファン回転数、温度、デバイス状態が表示されます。
IPMI は Intelligent Platform Management Interface の略称で、Intel アーキテクチャを採用したエンタープライズシステムの周辺デバイスを管理するための業界標準です。この標準は Intel、Hewlett-Packard、NEC、Dell Computer、SuperMicro によって策定されました。IPMI を使用すると、温度、電圧、ファンの動作状態、電源状態など、サーバーの物理的な稼働状態を監視できます。
IPMI を使用すると、運用保守システムは監視対象のサーバーやその他のデバイスから稼働状態メトリクスを非侵入型で取得し、情報セキュリティを確保できます。
設定¶
前提条件¶
ipmitoolツールキットのインストール
DataKit は ipmitool を使用して IPMI データを収集するため、このツールをマシンにインストールする必要があります。次のコマンドでインストールできます。
# CentOS
yum -y install ipmitool
# Ubuntu
sudo apt-get update && sudo apt -y install ipmitool
# macOS
brew install ipmitool # macOS
- モジュールのロード
インストール後に次のコマンドを実行すると、IPMI サーバーの出力情報を確認できます。
ipmitool -I lanplus -H <IP-address> -U <username> -P <password> sdr elist
SEL | 72h | ns | 7.1 | No Reading
Intrusion | 73h | ok | 7.1 |
Fan1A RPM | 30h | ok | 7.1 | 2160 RPM
Fan2A RPM | 32h | ok | 7.1 | 2280 RPM
Fan3A RPM | 34h | ok | 7.1 | 2280 RPM
Fan4A RPM | 36h | ok | 7.1 | 2400 RPM
Fan5A RPM | 38h | ok | 7.1 | 2280 RPM
Fan6A RPM | 3Ah | ok | 7.1 | 2160 RPM
Inlet Temp | 04h | ok | 7.1 | 23 degrees C
Exhaust Temp | 01h | ok | 7.1 | 37 degrees C
Temp | 0Fh | ok | 3.2 | 45 degrees C
... more
Note
- IP アドレスは、リモート管理するサーバーの IPMI ポートの IP アドレスです
- サーバーの
IPMI Settings -> Enable IPMI on LANを有効にする必要があります - サーバーの
Channel Privilege Level Restrictionsのオペレーターレベルを<User Name>の権限レベルと一致させる必要があります ipmitoolツールキットは DataKit を実行するマシンにインストールします。
コレクター設定¶
DataKit のインストールディレクトリにある conf.d/samples に移動し、ipmi.conf.sample をコピーして ipmi.conf という名前に変更します。設定例は次のとおりです。
[[inputs.ipmi]]
## If you have so many servers that 10 seconds can't finish the job.
## You can start multiple collectors.
## (Optional) Collect interval: (defaults to "10s").
interval = "10s"
## Set true to enable election
election = true
## The binPath of ipmitool
## (Example) bin_path = "/usr/bin/ipmitool"
bin_path = "/usr/bin/ipmitool"
## (Optional) The envs of LD_LIBRARY_PATH
## (Example) envs = [ "LD_LIBRARY_PATH=XXXX:$LD_LIBRARY_PATH" ]
## The ips of ipmi servers
## (Example) ipmi_servers = ["192.168.1.1"]
ipmi_servers = ["192.168.1.1"]
## The interfaces of ipmi servers: (defaults to []string{"lan"}).
## If len(ipmi_users)<len(ipmi_ips), will use ipmi_users[0].
## (Example) ipmi_interfaces = ["lanplus"]
ipmi_interfaces = ["lanplus"]
## The users name of ipmi servers: (defaults to []string{}).
## If len(ipmi_users)<len(ipmi_ips), will use ipmi_users[0].
## (Example) ipmi_users = ["root"]
## (Warning!) You'd better use hex_keys, it's more secure.
ipmi_users = ["root"]
## The passwords of ipmi servers: (defaults to []string{}).
## If len(ipmi_passwords)<len(ipmi_ips), will use ipmi_passwords[0].
## (Example) ipmi_passwords = ["calvin"]
## (Warning!) You'd better use hex_keys, it's more secure.
ipmi_passwords = ["calvin"]
## (Optional) Provide the hex key for the IMPI connection: (defaults to []string{}).
## If len(hex_keys)<len(ipmi_ips), will use hex_keys[0].
## (Example) hex_keys = ["XXXX"]
# hex_keys = []
## (Optional) Schema Version: (defaults to [1]).input.go
## If len(metric_versions)<len(ipmi_ips), will use metric_versions[0].
## (Example) metric_versions = [2]
metric_versions = [2]
## (Optional) Exec ipmitool timeout: (defaults to "5s").
timeout = "5s"
## (Optional) Ipmi server drop warning delay: (defaults to "300s").
## (Example) drop_warning_delay = "300s"
drop_warning_delay = "300s"
## Key words of current.
## (Example) regexp_current = ["current"]
regexp_current = ["current"]
## Key words of voltage.
## (Example) regexp_voltage = ["voltage"]
regexp_voltage = ["voltage"]
## Key words of power.
## (Example) regexp_power = ["pwr","power"]
regexp_power = ["pwr","power"]
## Key words of temp.
## (Example) regexp_temp = ["temp"]
regexp_temp = ["temp"]
## Key words of fan speed.
## (Example) regexp_fan_speed = ["fan"]
regexp_fan_speed = ["fan"]
## Key words of usage.
## (Example) regexp_usage = ["usage"]
regexp_usage = ["usage"]
## Key words of usage.
## (Example) regexp_count = []
# regexp_count = []
## Key words of status.
## (Example) regexp_status = ["fan"]
regexp_status = ["fan"]
[inputs.ipmi.tags]
# some_tag = "some_value"
# more_tag = "some_other_value"
設定後、DataKit を再起動します。
ConfigMap によるコレクター設定の注入または ENV_DATAKIT_INPUTS の設定でコレクターを有効にできます。
環境変数を使用して設定パラメータを変更することもできます(ENV_DEFAULT_ENABLED_INPUTS にデフォルトコレクターとして追加する必要があります)。
-
ENV_INPUT_IPMI_INTERVAL
収集間隔
フィールドタイプ: Duration
コレクター設定フィールド:
intervalデフォルト値: 10s
-
ENV_INPUT_IPMI_TIMEOUT
タイムアウト
フィールドタイプ: Duration
コレクター設定フィールド:
timeoutデフォルト値: 5s
-
ENV_INPUT_IPMI_DROP_WARNING_DELAY
IPMI サーバー停止警告の遅延
フィールドタイプ: Duration
コレクター設定フィールド:
drop_warning_delayデフォルト値: 5m
-
ENV_INPUT_IPMI_BIN_PATH
ipmitoolの実行ファイルパスフィールドタイプ: String
コレクター設定フィールド:
bin_path例:
/usr/bin/ipmitool -
ENV_INPUT_IPMI_ENVS
LD_LIBRARY_PATH の依存ライブラリパス
フィールドタイプ: JSON
コレクター設定フィールド:
envs例: '["LD_LIBRARY_PATH=XXXX:$LD_LIBRARY_PATH"]'
-
ENV_INPUT_IPMI_SERVERS
IPMI サーバー URL
フィールドタイプ: JSON
コレクター設定フィールド:
ipmi_servers例: '["192.168.1.1","192.168.1.2"]'
-
ENV_INPUT_IPMI_INTERFACES
IPMI サーバーのインターフェースプロトコル
フィールドタイプ: JSON
コレクター設定フィールド:
ipmi_interfaces例: '["
lanplus"]' -
ENV_INPUT_IPMI_USERS
ユーザー名
フィールドタイプ: JSON
コレクター設定フィールド:
ipmi_users例: '["root"]'
-
ENV_INPUT_IPMI_PASSWORDS
パスワード
フィールドタイプ: JSON
コレクター設定フィールド:
ipmi_passwords例: '["Calvin"]'
-
ENV_INPUT_IPMI_HEX_KEYS
IPMI 接続用の16進数キー
フィールドタイプ: JSON
コレクター設定フィールド:
hex_keys例: '["50415353574F5244"]'
-
ENV_INPUT_IPMI_METRIC_VERSIONS
メトリクスバージョン
フィールドタイプ: JSON
コレクター設定フィールド:
metric_versions例: '[2 or 3]'
-
ENV_INPUT_IPMI_REGEXP_CURRENT
電流メトリクスの正規表現
フィールドタイプ: JSON
コレクター設定フィールド:
regexp_current例: '["current"]'
-
ENV_INPUT_IPMI_REGEXP_VOLTAGE
電圧メトリクスの正規表現
フィールドタイプ: JSON
コレクター設定フィールド:
regexp_voltage例: '["voltage"]'
-
ENV_INPUT_IPMI_REGEXP_POWER
電力メトリクスの正規表現
フィールドタイプ: JSON
コレクター設定フィールド:
regexp_power例: '["pwr","power"]'
-
ENV_INPUT_IPMI_REGEXP_TEMP
温度メトリクスの正規表現
フィールドタイプ: JSON
コレクター設定フィールド:
regexp_temp例: '["temp"]'
-
ENV_INPUT_IPMI_REGEXP_FAN_SPEED
ファン回転数メトリクスの正規表現
フィールドタイプ: JSON
コレクター設定フィールド:
regexp_fan_speed例: '["fan"]'
-
ENV_INPUT_IPMI_REGEXP_USAGE
使用率メトリクスの正規表現
フィールドタイプ: JSON
コレクター設定フィールド:
regexp_usage例: '["usage"]'
-
ENV_INPUT_IPMI_REGEXP_COUNT
カウントメトリクスの正規表現
フィールドタイプ: JSON
コレクター設定フィールド:
regexp_count例: '[]'
-
ENV_INPUT_IPMI_REGEXP_STATUS
ステータスメトリクスの正規表現
フィールドタイプ: JSON
コレクター設定フィールド:
regexp_status例: '["fan"]'
-
ENV_INPUT_IPMI_TAGS
カスタムタグ。設定ファイルに同名のタグがある場合は上書きされます
フィールドタイプ: Map
コレクター設定フィールド:
tags例:
tag1=value1,tag2=value2
設定のヒント
- 各パラメータ分類のキーワードはすべて小文字で指定してください
ipmitool -I ...コマンドが返すデータを参照し、適切なキーワードを設定してください
メトリクス¶
以下のすべてのデータ収集にはグローバル選出タグが自動的に追加されます。必要に応じて [inputs.ipmi.tags] で追加のタグを指定できます。
| タグとフィールド | 説明 |
|---|---|
| host ( tag) |
監視対象の IPMI サーバーホスト。 |
| unit ( tag) |
監視対象ホスト上で正規化された IPMI センサー名。 |
| count | 設定した IPMI カウント正規表現に一致する汎用カウントメトリクス。 タイプ: int | (gauge) 単位: count |
| current | IPMI センサーが報告する電流。 タイプ: float | (gauge) 単位: ampere |
| fan_speed | IPMI センサーが報告するファン回転数。 タイプ: int | (gauge) 単位: RPM |
| power_consumption | IPMI センサーが報告する消費電力。 タイプ: float | (gauge) 単位: watt |
| status | 監視対象ユニットの数値ステータスコード。 タイプ: int | (gauge) 単位: N/A |
| temp | IPMI センサーが報告する温度。 タイプ: float | (gauge) 単位: temperature,C |
| usage | IPMI センサーが報告する使用率。 タイプ: float | (gauge) 単位: percent,percent |
| voltage | IPMI センサーが報告する電圧。 タイプ: float | (gauge) 単位: volt |
| warning | 監視対象ユニットが警告状態かどうか。1 は true、0 は false。 タイプ: int | (gauge) 単位: bool |