Prometheus 和 Grafana - 有没有办法让用户使用机器?

Prometheus and Grafana - Is there a way to get users on a machine?

我一直在使用 Prometheus 和 Grafana 来获取几个计算机实验室的状态和统计数据。有没有一种方法可以让通过 Prometheus 登录计算机的用户并将其放到 Grafana 上?

我将列出 2 个选项。第一个是将 Pushgateway 与 Prometheus 结合使用,第二个是仅使用 Prometheus。

1 - 将 Pushgateway 与 Prometheus 结合使用

您可以使用的一种解决方案是 Pushgateway。您将已登录和未登录的用户推送到 Pushgateway,然后 Prometheus 抓取它以收集值。这很快,因为您无需配置应用程序即可让 Prometheus 从中抓取数据。首先在您的 prometheus.yml 配置文件上配置 PushGateway:

....
scrape_configs:
  - job_name: 'pushgateway'
    scrape_interval: 10s
    honor_labels: true # disable auto discover labels
    static_configs:
      - targets: ['pushgateway:9091']

然后使用此脚本收集所有用户并将他们分成已登录和未登录用户:

#!/bin/bash

users=`cat /etc/passwd | cut -d: -f1`
users_logged=`who | cut -d' ' -f1 | sort | uniq`

for u in $users; do
  cmd="curl --data-binary @- http://admin:admin@localhost:9091/metrics/job/$u"
  if [[ "$users_logged" == *"$u"* ]]; then
    # echo "some_metric 3.14" | curl --data-binary @- http://admin:admin@localhost:9091/metrics/job/some_job
    echo "linux_user 1" | `echo $cmd`
  else
    echo "linux_user 0" | `echo $cmd`
  fi
done

一旦您的 Pushgateway 启动并且 运行 在 http://127.0.0.1:9091/ 上运行您 运行 玉米作业中的脚本,它会将值推送到 Pushgateway。

2 - 仅使用 Prometheus

如果您不想使用 Pushgateway,您可以配置您的应用程序以收集登录您计算机的用户并使用 Prometheus client library which fits your app programming language and expose the metric end-point and let Prometheus pull data from it. Here is one example using Spring Boot with micrometer in Java

prometheus node_exporter has a logind collector 默认关闭

您只需在启动时启用此收集器即可获取您需要的有关当前登录用户的指标。要启用导出器,您需要在启动时提供此标志:

--collector.logind