目录

    互联网的服务常依赖于成千上万的主机,而这些主机又部署在世界各地,再加上错综复杂的用户环境,要保证服务的稳定可靠,就需要对服务进行监控。监控的目的可以从这几个方面考虑:从系统维度,了解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 是一个开源的图表可视化系统,简单说图表配置比较方便、生成的图表比较漂亮。

    # 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 配置具体想要抓取的目标。

    # 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

    yum install docker
    yum install epel-release
    yum install python-pip
    pip install --upgrade pip
    pip install docker-compose
    

    启动 Docker

    service docker start
    docker-compose up
    

    3. 参考