.. _ipmi_exporter: ===================== IPMI Exporter ===================== .. note:: :ref:`hpe_server_monitor` :ref:`prometheus_exporters` 有一个官方 ``ipmi_exporter`` 可以基于 :ref:`ipmi` 输出 :ref:`metrics` 。并且有一个非常完美的 :ref:`grafana` `Grafana Dashboard 15765: IPMI Exporter `_ 。这样可以用来监控大规模服务器集群,并且生成告警。 ``ipmi_exporter`` 输出本地IPMI metrics到标准的 ``/metrics`` ,无需特殊配置。对于远程metrics,通用配置方法非常类似 :ref:`blackbox_exporter` (黑盒测试HTTP,HTTPS,DNS,TCP,ICMP和gRPC),只需要简单使用 ``target`` 和 ``module`` URL参数告知IPMI设备入口即可。可以对数以千计的IPMI设备进行metrics输出。 对于本地ipmi无需密码账号,对于远程ipmi,则要提供IPMI设备的用户名和密码。此外,还提供了一个 ``blacklist`` 屏蔽掉 FreeIPMI 不支持的特殊OEM传感器。 有两个案例配置文件: ``ipmi_local.yml`` 抓取本地主机metrics,以及 ``ipmi_remote.yml`` 抓取远程IPMI接口。 .. note:: 社区 :ref:`prometheus_exporters` 的 ``ipmi_exporter`` 是采用 ``freeipmi`` 来访问IPMI获取服务器监控数据的。 另外一种解决方案是采用 :ref:`node_exporter` 提供的 :ref:`node_exporter_ipmitool_text_plugin` 实现 安装 ======== - 直接从 `Prometheus IPMI Exporter (GitHub) `_ 下载release包,也可以参考该文档自己编译: .. literalinclude:: ipmi_exporter/install_ipmi_exporter :caption: 安装 ``ipmi_exporter`` - 服务器安装 ``freeipmi`` (安装以后会获得 `GNU FreeIPMI `_ 全部命令,位于 ``/usr/sbin`` 目录): .. literalinclude:: ipmi_exporter/ubuntu_install_freeipmi :caption: 在Ubuntu中安装FreeIPMI - 创建一个 ``ipmi-exporter`` 用户,类似 :ref:`prometheus_startup` ,我们将限定这个用户不可登录: .. literalinclude:: ipmi_exporter/create_ipmi-exporter_user :caption: 设置 ``ipmi-exporter`` 用户账号 - ``ipmi-exporter`` 用户必须能 ``sudo`` 无密码执行 ``freeipmi`` 命令,所以配置 ``/etc/sudoers`` : .. literalinclude:: ipmi_exporter/ipmi-exporter_sudo :caption: 配置 ``ipmi-exporter`` 用户 sudo 权限 - 创建 ``/etc/prometheus/ipmi_remote.yml`` : .. literalinclude:: ipmi_exporter/ipmi_remote.yml :language: yaml :caption: 创建 ``/etc/prometheus/ipmi_remote.yml`` - 创建 ``/etc/prometheus/ipmi_local.yml`` (如果是本地执行): .. literalinclude:: ipmi_exporter/ipmi_local.yml :language: yaml :caption: 创建 ``/etc/prometheus/ipmi_local.yml`` 注意,这里按照 ``/etc/sudoers`` 添加的需要执行的命令,每个都采用了 ``sudo`` 来执行,参考了 `ipmi_exporter exanmple config `_ - 参考 :ref:`prometheus_startup` 方式为 ``ipmi_exporter`` 配置一个 ``/etc/systemd/system/ipmi_exporter.service`` (这里假设使用 ``/etc/prometheus/ipmi_remote.yml`` 远程访问IPMI): .. literalinclude:: ipmi_exporter/ipmi_exporter.service :caption: systemd启动配置 ``/etc/systemd/system/ipmi_exporter.service`` - 启动 ``ipmi_exporter`` 服务: .. literalinclude:: ipmi_exporter/start_ipmi_exporter.service :caption: 启动 ``ipmi_exporter`` 服务 debug ======= 上述运行起来 ``ipmi_exporter`` 之后,直接通过 ``wget http://127.0.0.1:9290/metrics`` 拿到的数据中关于IPMI的记录没有采集到(metrics值0表示采集异常): .. literalinclude:: ipmi_exporter/wget_ipmi_exporter_metrics_0 :caption: ``wget http://127.0.0.1:9290/metrics`` 检查 ``ipmi_exporter`` 显示数据采集失败,metrics 值 0 表示采集异常 检查服务 ``systemctl status ipmi_exporter`` 显示没有权限打开: .. literalinclude:: ipmi_exporter/ipmi_exporter_services_status :caption: 显示 ipmi_exporter 采集因为权限不足而失败 :emphasize-lines: 16-19 注意,这里输出错误信息实际上是每次访问 ``ipmi_exporter`` 的 ``metrics`` 时候输出的,也就是服务的控制台输出。 我调整了以下 ``ipmi-exporter`` 用户账号,允许该用户登陆( ``/bin/bash`` ),然后切换到该账号下模拟执行 ``sudo bmc-info`` 是能够正常运行输出的。所以怀疑是 ``/etc/prometheus/ipmi_local.yml`` 配置生效问题(虽然参考 `ipmi_exporter exanmple config `_ 配置了命令都使用 ``sudo`` ) 汗,我知道原因了: 我配置了一个 ``cloudatlas`` 模块,而不是 ``default`` ,这个模块是在 ``prometheus`` scrap 时指定模块才能使用,简单使用 ``curl`` 没有指定模块,就没有用到 ``cloudatlas`` 配置中的 ``sudo`` 简化配置,修订为 ``default`` 之后,果然直接使用 ``curl http://127.0.0.1:9290/metrics`` 可以获得完整的IPMI输出信息,包括了服务器的温度,风扇是否工作正常等信息... 配置Prometheus ================= 本地metrics ---------------- 本地metrics获取非常简单,只需要配置运行exporter的一个默认的metrics入口: - 修改 ``/etc/prometheus/prometheus.yml`` 添加一段 ``scrape_configs`` 配置: .. literalinclude:: ipmi_exporter/prometheus.yml :caption: 在 prometheus.yml 中 ``scrape_configs`` 段落添加 ``ipmi`` 抓取任务 :emphasize-lines: 7-12 - 然后重启 ``prometheus`` 服务就可以在 targets 页面看到新的抓取目标: .. figure:: ../../../../_static/kubernetes/monitor/prometheus/prometheus_exporters/prometheus_impi.png 远程metrics(待实践) ------------------------- 远程metrics需要配置2个文件,一个是指定目标,一个是配置抓取地址(这里假设远程服务器的DNS名字是 ``ipmi-exporter.internal.example.com`` ): - 配置 ``/srv/ipmi_exporter/targets.yml`` : .. literalinclude:: ipmi_exporter/targetes.yml :caption: 设置目标地址 - 在 ``/etc/prometheus/prometheus.yml`` 添加一段 ``scrape_configs`` 配置: .. literalinclude:: ipmi_exporter/prometheus_ipmi_remote.yml :caption: 远程抓取配置 prometheus.yml 配置Grafana ============== :ref:`grafana` `Grafana Dashboard 15765: IPMI Exporter `_ 完成后就可以看到我的 :ref:`hpe_dl360_gen9` :ref:`hpe_server_monitor` 的功耗监控: .. figure:: ../../../../_static/kubernetes/monitor/prometheus/prometheus_exporters/grafana_impi.png 温度监控: .. figure:: ../../../../_static/kubernetes/monitor/prometheus/prometheus_exporters/grafana_impi_temperatures.png .. note:: 没有获取到风扇转速 参考 ====== - `Prometheus IPMI Exporter (GitHub) `_