互联网的服务常依赖于成千上万的主机,而这些主机又部署在世界各地,再加上错综复杂的用户环境,要保证服务的稳定可靠,就需要对服务进行监控。监控的目的可以从这几个方面考虑:从系统维度,了解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 是一个开源的图表可视化系统,简单说图表配置比较方便、生成的图表比较漂亮。
|
|
Prometheus 使用 YAML 进行配置。global 配置一些全局信息,scrape_configs 配置具体想要抓取的目标。
|
|
以 CentOS 为例,安装 Docker 和 Docker compose
|
|
启动 Docker
|
|