docker - docker内的prometheus没有刮取node_exporter
问题描述
我使用他们页面上的官方指南安装了 prometheus 和 docker 。现在我也有node_exporter在主机上工作。然而普罗米修斯似乎并没有抓取它的指标。
我使用以下方法运行普罗米修斯:
sudo docker run -d -p 9090:9090 -v /home/main/prometheus/config.yml:/etc/prometheus/prometheus.yml prom/prometheus
- job_name: node
static_configs:
- targets: ['localhost:9100']
curl -i localhost:9100
HTTP/1.1 200 OK
Content-Length: 150
Content-Type: text/html; charset=utf-8
<html>
<head><title>Node Exporter</title></head>
<body>
<h1>Node Exporter</h1>
<p><a href="/metrics">Metrics</a></p>
</body>
</html>
更新
显然,这是在 docker 上运行时使用“-net=host”标志修复的:
sudo docker run --net=host -d -p 9090:9090 -v /home/main/prometheus/config.yml:/etc/prometheus/prometheus.yml prom/prometheus
为什么他们不告诉这件事?没有这个标志,Prometheus 不能访问其容器之外的任何东西?
解决方案
在文档中,示例假定 Prometheus 和节点导出器在同一主机上运行。在您的情况下,Prometheus 在 docker 上运行,这意味着节点导出器位于容器外部。
您应该尝试使用容器名称、IPhost.docker.internal
或类似名称来达到您的目标。
推荐阅读
- reactjs - 在使用 ref 渲染之前设置状态到 firestore
- c - c中的函数strcmp没有检测到符号>?
- javascript - 如何从 Promise、reduce、format 内部返回数据?
- sql - 为什么 SQL 中存在“WHERE”?因为“HAVING”可以完成它的任务,而且还不止这些
- mongodb - .find() 填充查询 MongoDB (mongoose)
- sql-server - 创建表空间:CREATE、DROP 或 ALTER 语句中使用的未知对象类型“TABLESPACE”
- javascript - Chrome 网上应用店付款弃用 - 如何迁移
- amazon-web-services - CloudFormation 堆栈中的错误:策略中的语法错误。(服务:AmazonIdentityManagement;状态代码:400;
- amqp - Azure 服务总线 javax.jms.IllegalStateException:由于不可恢复的错误,MessageProducer 已关闭
- java - 用一个节点打印链表类失败