Please enable Javascript to view the contents

Prometheus

 ·  ☕ 2 分钟

互联网的服务常依赖于成千上万的主机,而这些主机又部署在世界各地,再加上错综复杂的用户环境,要保证服务的稳定可靠,就需要对服务进行监控。监控的目的可以从这几个方面考虑:从系统维度,了解CPU、内存、硬盘使用情况;从网络监控维度,了解网络上行、下行速率;从服务监控维度,了解应用程序的健康性、可用性。当然,有了监控数据,还可以配置告警,通知维护人员、辅助排查故障问题。

1. 监控开源工具

1.1 Nagios

  • 优点
    • 监控所有协议(HTTP, FTP, SSH, POP3, SMTP, SNMP, MySQL…)
    • 完全独立,没有依赖
    • 支持震荡检测
    • 插件化
  • 缺点
    • Web 页面不友好
    • 不支持数据的图表显示

1.2 Zabbix

  • 优点
    • 监控所有协议(HTTP, FTP, SSH, POP3, SMTP, SNMP, MySQL…)
    • Web 界面友好
    • 可以监控 Log 文件
    • 支持 Client agent ( Pull、Push model)
  • 缺点
    • 配置比较复杂
    • 需要关系型数据库支持 ( mysql、PostgreSQL..)

1.3 Prometheus

  • 优点
    • 用 Go 编写,性能好
    • 支持多语言客户端 (sdk)
    • 支持 Pul l和 Push 模式
    • 支持多种数据可视化模式 ( Grafana )
  • 缺点
    • 缺少插件支持

2. Prometheus + Grafana 搭建

Prometheus 是源于 Google Borgmon 的一个开源监控系统,用 Golang 开发。被很多人称为下一代监控系统。

Prometheus 基本原理是通过 HTTP 协议周期性抓取被监控组件的状态。只要组件提供 HTTP 接口就可以接入监控系统,不需要任何 SDK 或者其他的集成过程。这样做非常适合虚拟化环境比如 VM 、 Docker、Mesos 、Kubernetes 。

输出被监控组件信息的 HTTP 接口被叫做 exporter 。

Grafana 是一个开源的图表可视化系统,简单说图表配置比较方便、生成的图表比较漂亮。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# docker-compose.yml
version: '2'
services:
    prometheus:
        image: prom/prometheus:latest
        volumes:
            - ./prometheus.yml:/etc/prometheus/prometheus.yml
        command:
            - '-config.file=/etc/prometheus/prometheus.yml'
        ports:
            - '9090:9090'
    node-exporter:
        image: prom/node-exporter:latest
        ports:
            - '9100:9100'
    grafana:
        image: grafana/grafana:latest
        environment:
            - GF_SECURITY_ADMIN_PASSWORD=password
        depends_on:
            - prometheus
        ports:
            - "3000:3000"

Prometheus 使用 YAML 进行配置。global 配置一些全局信息,scrape_configs 配置具体想要抓取的目标。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# prometheus.yml
global:
    scrape_interval: 5s
    external_labels:
        monitor: 'my-monitor'
scrape_configs:
    - job_name: 'prometheus'
      target_groups:
          - targets: ['localhost:9090']
    - job_name: 'node-exporter'
      target_groups:
          - targets: ['node-exporter:9100']

以 CentOS 为例,安装 Docker 和 Docker compose

1
2
3
4
5
yum install docker
yum install epel-release
yum install python-pip
pip install --upgrade pip
pip install docker-compose

启动 Docker

1
2
service docker start
docker-compose up

3. 参考


微信公众号
作者
微信公众号