コンテンツにスキップ

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
  • モジュールのロード
modprobe ipmi_msghandler
modprobe ipmi_devintf

インストール後に次のコマンドを実行すると、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
  1. IP アドレスは、リモート管理するサーバーの IPMI ポートの IP アドレスです
  2. サーバーの IPMI Settings -> Enable IPMI on LAN を有効にする必要があります
  3. サーバーの Channel Privilege Level Restrictions のオペレーターレベルを <User Name> の権限レベルと一致させる必要があります
  4. 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] で追加のタグを指定できます。

 [inputs.ipmi.tags]
  # some_tag = "some_value"
  # more_tag = "some_other_value"
  # ...
タグとフィールド 説明
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

フィードバック

このページは役に立ちましたか?