如何Prometheus在CentOS 7使用Docker安装

来自第Prometheus联合创始人朱利叶斯·Volz的

介绍

Prometheus是一个开源监控系统和时间序列数据库。 它解决了监控的许多方面,如指标的生成和收集,在仪表板上绘制结果数据,以及警告异常。 为了实现这一点,它提供了单独运行但组合使用的各种组件。

Docker提供了一种方式,您可以使用Linux容器(或其他封装技术)封装服务器进程,以便它们更容易管理和彼此隔离。 要了解更多关于Docker,看到Docker生态系统:介绍公共组件

在本教程中,我们将学习如何安装在Docker上使用Prometheus的三个关键组件。 这些是:

  • 一个Prometheus服务器来收集指标并进行查询
  • 节点导出器以Prometheus兼容格式导出系统指标
  • Grafana,一个基于Web的图形仪表板生成器,支持Prometheus等后端

Prometheus生态系统中有更多的组件,但这三个组件为使用Prometheus提供了一个良好的起点。

先决条件

要遵循本教程,您需要:

注:本文已经在1个CPU / 512 MB RAM的CentOS 7.1Droplet过测试。 应按照本文第2步中所述的不同数量的可用资源调整Prometheus配置。

第1步 - 安装Prometheus

本节将解释如何使用Docker安装主要的Prometheus服务器。 确保继续之前的每节的先决条件安装Docker。 Prometheus服务器是Prometheus生态系统的核心部分,负责收集和存储指标以及处理表达式查询和生成警报。

所有组件Prometheus容器Docker图像下托管舞会上Docker Hub组织。 运行prom/prometheus没有任何进一步的选项Docker映像开始与位于一个示例配置文件中的Prometheus服务器/etc/prometheus/prometheus.yml容器内。 它还使用Docker的数据卷安装在/prometheus存储收集的度量数据的容器内。 这个数据卷目录实际上是Docker在容器首次启动时自动创建的目录。 其中的数据在同一容器的重新启动之间持久化。

有多种方式覆盖默认配置文件。 例如,自定义配置文件可以作为Docker数据卷从主机文件系统传递到容器中,或者您可以选择构建派生的Docker容器,将自己的配置文件刻录到容器映像中。 在本教程中,我们将选择从主机系统传递配置文件。

还有不同的模式用于组织度量的存储。 在本教程中,我们将使用使用的Docker形象的默认行为Docker的数据量存储的度量标准。 您也可以考虑创建一个数据卷容器,如果它更适合您的需要。

注意:要了解如何创建Docker数据量,阅读如何在Ubuntu 14.04Docker的数据量工作 (本文中的相关部分都没有Ubuntu的具体)。

首先,在创造上的主机文件系统的最小Prometheus配置文件~/prometheus.yml

nano ~/prometheus.yml

下面的内容添加到文件(替换your_server_ip与Droplet的IP地址):

〜/ prometheus.yml
# A scrape configuration scraping a Node Exporter and the Prometheus server
# itself.
scrape_configs:
  # Scrape Prometheus itself every 5 seconds.
  - job_name: 'prometheus'
    scrape_interval: 5s
    target_groups:
      - targets: ['localhost:9090']

  # Scrape the Node Exporter every 5 seconds.
  - job_name: 'node'
    scrape_interval: 5s
    target_groups:
      - targets: ['your_server_ip:9100']

这个示例配置使Prometheus从它自己抓取指标(因为Prometheus还以Prometheus兼容格式暴露了自身的指标)以及我们稍后将要设置的Node Exporter。 尽管Prometheus可以在其容器中使用连接到其自身localhost的主机名,则需要使用服务器的外部IP刮节点出口商,因为节点出口商将在一个单独的容器设有一个独立的网络空间中运行。

使用外部配置文件启动Prometheus Docker容器:

docker run -d -p 9090:9090 -v ~/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus -config.file=/etc/prometheus/prometheus.yml -storage.local.path=/prometheus -storage.local.memory-chunks=10000

第一次运行此命令时,它将从Docker Hub中提取Docker镜像。

此命令很长,并且包含许多命令行选项。 让我们更详细地看看它:

  • -d选项启动在独立模式下的Prometheus的容器,这意味着容器将在后台启动,并不会按终止CTRL+C
  • -p 9090:9090的选项公开Prometheus的web端口(9090),并使其通过主机系统的外部IP地址访问。
  • -v [...]选项挂载prometheus.yml从主机文件系统的配置文件到哪里Prometheus希望它(容器内的位置/etc/prometheus/prometheus.yml )。
  • -config.file选项相应地设置到Prometheus配置文件的位置,在容器内
  • 所述-storage.local.path选项配置在容器内的指标的存储位置。
  • 最后, -storage.local.memory-chunks选项调整Prometheus的内存使用主机系统的非常小的RAM(只有512MB)和少量的储存时间序列的量在本教程中(略低于1000)。 它指示Prometheus只保留10000样品块内存(每列约10块),而不是1048576 这个默认的更多的内存的机器上运行时的Prometheus和储存更多的时候, 你肯定会需要调整值系列。 请参阅Prometheus的存储文档,为解决此更多的细节。

您可以使用以下命令列出所有正在运行的Docker容器:

docker ps

例如,对于Prometheus Docker容器,您将看到类似于以下内容的内容:

Output of `docker ps`CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                    NAMES
6a89ac39911e        prom/prometheus      "/bin/prometheus -con"   2 hours ago         Up 2 hours          0.0.0.0:9090->9090/tcp   stoic_pike

使用在图示的容器ID docker ps输出,你可以检查使用以下命令运行Prometheus服务器的日志:

docker logs container_id

在我们的示例中,命令将是:

docker logs 6a89ac39911e

要找出对主机的文件系统存储在度量存储卷的地方,你可以运行你的CONTAINER_ID如下:

docker inspect container_id

这将输出有关容器配置的信息,包括任何已安装的Docker卷的主机路径。

在输出中找到类似于以下内容的部分:

Output of `docker inspect ...`...
"Mounts": [
    {
        "Source": "/home/sammy/prometheus.yml",
        "Destination": "/etc/prometheus/prometheus.yml",
        "Mode": "",
        "RW": true
    },
    {
        "Name": "821b0abc470a9c758ff35ed5cff69077423a629566082a605a01d8207d57cd6c",
        "Source": "/var/lib/docker/volumes/821b0abc470a9c758ff35ed5cff69077423a629566082a605a01d8207d57cd6c/_data",
        "Destination": "/prometheus",
        "Driver": "local",
        "Mode": "",
        "RW": true
    }
],
...

在这个例子中,指标都存储在/var/lib/docker/volumes/821b0abc470a9c758ff35ed5cff69077423a629566082a605a01d8207d57cd6c/_data在主机系统上。 当首次启动Prometheus容器时,此目录是由Docker自动创建的。 它被映射到/prometheus在容器中的目录。 此目录中的数据在同一容器的重新启动中持久化。 如果愿意,您还可以挂载现有的主机目录以存储度量标准数据。 请参阅如何在Ubuntu 14.04与Docker的数据量工作如何实现这一点。 本文是为Ubuntu 14.04编写的,但Docker命令和配置文件在CentOS 7上是相同的。

您现在应该能够到达你的Prometheus服务器http:// your_server_ip :9090/ 验证它是由前往收集有关自身指标http:// your_server_ip :9090/status和定位http://localhost:9090/metrics端点的prometheus目标部分的工作。 这个目标的国家列应显示目标的状态, 身体健康 相比之下, http://localhost:9100/metrics (节点出口商)终结点还是应该显示为不健康的 ,因为节点出口商尚未开始,因此不能被刮掉:

节点出口商目标应显示为UNHEALTHY

总之,你现在有Prometheus使用自定义Prometheus配置文件运行的Docker容器~/prometheus.yml ,位于主机上的文件系统。 度量存储位于/prometheus在容器中,这是由所示的路径在主机系统上备份目录docker inspect命令,在本节进行说明。

第2步 - 设置节点导出器

在本节中,我们将安装Prometheus Node Exporter。 节点出口程序是一个服务器,公开关于其运行的主机(节点)的Prometheus度量。 这包括有关计算机文件系统,网络设备,处理器使用情况,内存使用情况等的指标。

请注意,在Docker上运行节点导出器会带来一些挑战,因为它的整个目的是公开运行它的主机的指标。 如果我们在Docker上运行它而没有其他选项,Docker对文件系统和网络设备等资源的命名空间将导致它只导出有关容器环境的指标,这将不同于主机的环境。 因此,通常建议直接在Docker外部的主机系统上运行Node Exporter。 但是,如果您需要使用Docker管理所有进程,我们将介绍一个解决方法,它为从Docker导出主机指标提供了合理的近似值。

要使用Docker在端口9100上启动节点导出器:

docker run -d -p 9100:9100 -v "/proc:/host/proc" -v "/sys:/host/sys" -v "/:/rootfs" --net="host" prom/node-exporter -collector.procfs /host/proc -collector.sysfs /host/proc -collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)"

下面Docker和节点出口标志用于提供主机度量一个合理的近似:

  • 在Linux上,节点出口商收集其大部分指标从/proc/sys文件系统。 这些文件系统挂载从主机到下面的容器/host目录中,使用多克的-v标志。
  • 通过节点出口商的-collector.procfs-collector.sysfs标志,我们指示节点出口来寻找/proc/sys在非标准位置的文件系统。
  • 要报告主机文件系统的指标,我们还安装了整个根( / )文件系统放入容器中(在/rootfs ),再次使用Docker的-v标志。
  • 使用节点导出的-collector.filesystem.ignored-mount-points标志忽略不属于该主机系统的容器内的任何其他的文件系统。 此选项使用装入点的正则表达式从报告的度量中排除。
  • 使用--net=hostDocker标志,我们把在容器到同一网络为主机,使得来自文件读出诸如/proc/net/dev会产生相同的结果作为主机(从读/proc文件系统从主机安装在是不够的)。

请注意,与直接在主机上运行的节点导出器相比,一些度量标准仍然不同。 具体来说,报道了文件系统的使用指标将有一个/rootfs在他们的价值前缀mountpoint标签,因为我们的根文件系统这个前缀在容器下安装。 也不能保证所描述的变通方法足以用于任何未来的Node Exporter功能,因此,您可以自行决定在Docker上运行Node Exporter。

Prometheus服务器现在应该自动开始刮除节点导出程序。 前往您的Prometheus服务器状态页以http:// your_server_ip :9090/status ,并验证http:// your_server_ip :9100/metrics的目标为node工作现在呈现出健康状态:

节点导出器目标应显示为HEALTHY

第3步 - 设置Grafana

最后,我们将设置Grafana。 Grafana是一个图形仪表板生成器,支持Prometheus作为后端查询数据以图形。

Grafana在可配置的基于SQL的数据库中存储其仪表板元​​数据(例如存在的仪表板以及它们应显示的图表)。 Grafana支持使用本地文件支持的SQLite3数据库以及外部数据库服务器,如MySQL或PostgreSQL。

在本教程中,我们将使用由Docker数据卷支持的SQLite3数据库。 何时以及如何使用SQLite的详细信息。

启动Grafana与管理员密码(Docker容器admin_password您选择的):

docker run -d -p 3000:3000 -e "GF_SECURITY_ADMIN_PASSWORD=admin_password" -v ~/grafana_db:/var/lib/grafana grafana/grafana

这将下载从Docker Hub的GrafanaDocker形象,创造放置在一个新的泊坞容量~/grafana_db在主机系统上,并在/var/lib/grafana容器中的文件系统。 在容器中,Grafana将自动创建和初始化其sqlite3的数据库/var/lib/grafana/grafana.db

-e标志允许通过环境变量设置为Docker容器内启动的进程。 在这里,我们用它来设置GF_SECURITY_ADMIN_PASSWORD环境变量所需的仪表板管理员密码,覆盖的默认密码admin 环境变量也可用于覆盖任何其他Grafana配置设置。 请参见使用环境变量的更多细节。

要验证Grafana运行正常,头http:// your_server_ip :3000/ 管理员用户名是admin ,密码为先前启动Docker容器时所选择的人。

使用您选择的密码登录Grafana

登录后,您应该看到Grafana的主视图:

Grafana主视图

请参阅Grafana文档以获得更多关于如何开始使用Grafana开始。 PrometheusGrafana文档还说明了如何结合使用Prometheus专门Grafana。

结论

恭喜! 您已经设置了一个Prometheus服务器,一个节点导出器和Grafana - 所有使用Docker。 即使这些目前都在同一台机器上运行,这只是为了演示的目的。 在生产设置中,通常在每个受监控的计算机上运行节点导出器,多个Prometheus服务器(根据组织的需要)以及单个Grafana服务器来映射来自这些服务器的数据。

要了解更多关于一般使用Prometheus,请参阅其文档

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏