监控目标
1、长期趋势分析:通过对监控样本数据的持续收集和统计,对监控指标进行长期趋势分析,可以提前
预测对资源进行扩容。
2、对照分析:通过监控能够方便的对系统进行跟踪和比较。
3、告警:当系统出现或者即将出现故障时,监控系统需要迅速反应并通知管理员,从而快速处理或者
提前预防故障发生。
4、故障分析与定位:通过监控以及历史数据的分析,能够找到并解决根源问题。
5、数据可视化:通过可视化仪表盘能够直接获取系统的运行状态、资源使用情况、以及服务运行状态
等直观信息。
方案:
Prometheus server + Alertmanager + Grafana 数据可视化
1.1 Prometheus简介
Prometheus是一个开放性的监控解决方案,用户可以方便的安装和使用Prometheus并能够方便扩展
在Prometheus的架构设计中,Prometheus Server并不直接服务监控特定的目标,其主要任务负责数据
的收集,存储并且对外提供数据查询支持
Prometheus周期性的从Exporter暴露的HTTP服务地址(通常是/metrics)拉取监控样本数据
对比常见的监控系统如Nagios、Zabbix,Prometheus 有如下优势:
- 易于管理
- 监控服务的内部运行状态
- 强大的数据模型、查询语言PromQL
- 高效可扩展、易于集成
- 可视化、开放性
1.2 Grafana简介
Grafana是一个开源的通用可视化平台,并且提供了对Prometheus的完整支持,Grafana不仅仅适用于
展示Prometheus下的监控数据,也适用于一些其他的数据可视化需求
1.2.1 数据源(Data Source)
目前Grafana官方提供了对:Graphite, InfluxDB, OpenTSDB, Prometheus, Elasticsearch, CloudWatch的支持,将这
些对象以数据源的形式添加到Grafana中,Grafana便可以轻松的实现对这些数据的可视化工作
1.2.2 仪表盘(Dashboard)
通过Dashboard来组织和管理我们的数据可视化图表
1.2.3 组织和用户
提供了面向企业的组织级管理能力,Dashboard是属于一个Organization
1.3 AlertManager
Alertmanager主要负责对Prometheus产生的告警进行统一处理,包含一下几个部分:
- 全局配置(global):用于定义一些全局的公共参数,如全局的SMTP配置,Slack配置等内容;
模板(templates):用于定义告警通知时的模板,如HTML模板,邮件模板等; - 告警路由(route):根据标签匹配,确定当前告警应该如何处理;
- 接收人(receivers):接收人是一个抽象的概念,它可以是一个邮箱也可以是微信,Slack或者Webhook等,接收人一般配合告警路由使用;
- 抑制规则(inhibit_rules):合理设置抑制规则可以减少垃圾告警的产生
alert配置格式
global:
[ resolve_timeout: <duration> | default = 5m ]
[ smtp_from: <tmpl_string> ]
[ smtp_smarthost: <string> ]
[ smtp_hello: <string> | default = "localhost" ]
[ smtp_auth_username: <string> ]
[ smtp_auth_password: <secret> ]
[ smtp_auth_identity: <string> ]
[ smtp_auth_secret: <secret> ]
[ smtp_require_tls: <bool> | default = true ]
[ slack_api_url: <secret> ]
[ victorops_api_key: <secret> ]
[ victorops_api_url: <string> | default = "https://alert.victorops.com/integrations/generic/20131114/
alert/" ]
[ pagerduty_url: <string> | default = "https://events.pagerduty.com/v2/enqueue" ]
[ opsgenie_api_key: <secret> ]
[ opsgenie_api_url: <string> | default = "https://api.opsgenie.com/" ]
[ hipchat_api_url: <string> | default = "https://api.hipchat.com/" ]
[ hipchat_auth_token: <secret> ]
[ wechat_api_url: <string> | default = "https://qyapi.weixin.qq.com/cgi-bin/" ]
[ wechat_api_secret: <secret> ]
[ wechat_api_corp_id: <string> ]
[ http_config: <http_config> ]
templates:
[ - <filepath> ... ]
route: <route>
receivers:
- <receiver> ...
inhibit_rules:
[ - <inhibit_rule> ... ]
1.4.1 Exporter来源
Prometheus社区提供了丰富的Exporter实现,涵盖了从基础设施,中间件以及网络等各个方面的监控功能。这
些Exporter可以实现大部分通用的监控需求。除了直接使用社区提供的Exporter程序以外,用户还可以基于
Prometheus提供的Client Library创建自己的Exporter程序
1.4.2 Exporter规范
所有的Exporter程序都需要按照Prometheus的规范,返回监控的样本数据