监控多台主机的状态可以使用 Prometheus 和 Grafana 这两个工具。 Prometheus 是一个开源的监控系统,它会定期地从监控的服务器收集数据并存储到本地。 Grafana 是一个开源的可视化工具,可以帮助你展示和分析从 Prometheus 收集到的数据。

要使用 Docker 部署 Prometheus 和 Grafana,你需要先安装 Docker。然后,你可以使用 Docker Compose 来管理这两个容器。

Docker Compose 文件内容如下:

version: '3'
services:
  prometheus:
    image: prom/prometheus
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    ports:
      - 9090:9090
  grafana:
    image: grafana/grafana
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=yourpassword
    depends_on:
      - prometheus
    ports:
      - 3000:3000

上面的 Docker Compose 文件中,我们定义了两个服务:Prometheus 和 Grafana。Prometheus 服务使用的是 prom/prometheus 镜像,并将当前目录下的 prometheus.yml 文件挂载到容器中的 /etc/prometheus/prometheus.yml 位置。Grafana 服务使用的是 grafana/grafana 镜像,并设置了管理员密码。Grafana 服务依赖于 Prometheus 服务,这意味着 Grafana 服务启动之前,Prometheus 服务必须已经启动。

ERROR: for prometheus_prometheus_1 Cannot start service prometheus: failed to create shim: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting “/root/data/prometheus/prometheus.yml” to rootfs at “/etc/prometheus/prometheus.yml”: mount /root/data/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml (via /proc/self/fd/6), flags: 0x5000: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type

可能的原因有几个:

主机上不存在/root/data/prometheus/prometheus.yml文件。请确保文件存在,并且位于正确的路径。

/root/data/prometheus/prometheus.yml文件不是常规文件。请确保文件不是目录或者是命名管道或套接字等特殊文件。

/root/data/prometheus/prometheus.yml文件的权限存在问题。请确保容器运行的用户可以读取该文件。

容器中的/etc/prometheus/prometheus.yml路径存在问题。请确保路径存在,并且容器运行的用户可以写入。

你可以使用如下命令来启动这两个服务:

docker-compose up -d

启动之后,你就可以在浏览器中访问 Prometheus 和 Grafana 了。

你也可以在浏览器中访问 Grafana,地址为 http://localhost:3000。第一次访问 Grafana 时,你需要输入管理员密码,然后你就可以看到 Grafana 的界面了。在 Grafana 界面中,你可以创建 dashboards 来展示和分析从 Prometheus 收集到的数据。

在 Grafana 中,你需要添加一个数据源,指向你部署的 Prometheus 实例。之后,你就可以在 Grafana 中使用 Prometheus 的查询语言来检索数据并创建图表了。

如果你要监控多台主机,你需要在 Prometheus 的配置文件 prometheus.yml 中指定监控的主机地址。你可以使用如下的配置文件:

global:
  scrape_interval: 15s
  evaluation_interval: 15s
  external_labels:
    monitor: 'codelab-monitor'

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'node'
    static_configs:
      - targets: ['192.168.1.10:9100', '192.168.1.11:9100']

上面的配置文件中,我们定义了两个 job:prometheus 和 node。prometheus job 用于监控本地的 Prometheus 实例,node job 用于监控两台主机,地址分别为 192.168.1.10:9100 和 192.168.1.11:9100。

你还可以通过在 Prometheus 的配置文件中添加更多的 job 来监控更多的主机。你也可以使用 Prometheus 的 service discovery 功能来动态发现主机,而不需要手动在配置文件中添加。

在 Grafana 中,你可以使用 Prometheus 的查询语言来检索数据,然后创建图表来展示数据。例如,你可以使用如下的查询语句来查询 CPU 使用率:

100 - (avg by(instance) (irate(node_cpu_seconds_total{mode='idle'}[5m])) * 100)

你也可以通过在 Grafana 中添加更多的图表来监控更多的指标。

通过使用 Docker 部署 Prometheus 和 Grafana,你可以方便地监控多台主机的状态。你可以通过修改配置文件来添加更多的监控主机,也可以通过在 Grafana 中添加更多的图表来监控更多的指标。

下面是一些常见问题和解决方案:

Prometheus 和 Grafana 无法访问:这可能是因为你的机器上的防火墙阻止了访问。你可以通过关闭防火墙或者为 Prometheus 和 Grafana 添加规则来解决这个问题。

Prometheus 和 Grafana 无法连接:这可能是因为你没有正确配置 Prometheus 和 Grafana 的连接。你可以检查 Prometheus 的配置文件和 Grafana 的数据源配置,确保它们连接到了正确的地址。

Prometheus 和 Grafana 启动失败:这可能是因为你的机器上缺少了某些依赖库或者环境变量。你可以检查日志文件来了解更多信息。