监控是整个产品周期中最重要的一环,及时预警减少故障影响免扩大,而且能根据历史数据追溯问题。
对系统不间断实时监控
实时反馈系统当前状态
保证业务持续性运行
监控系统
监控方案
告警
特点
适用
Zabbix
Y
大量定制工作
大部分的互联网公司
open-falcon
Y
功能模块分解比较细,显得更复杂
系统和应用监控
Prometheus+Grafana
Y
扩展性好
容器,应用,主机全方面监控
市场上主流的开源监控系统基本都是这个流程:
l 数据采集:对监控数据采集
l 数据存储:将监控数据持久化存储,用于历时查询
l 数据分析:数据按需处理,例如阈值对比、聚合
l 数据展示:Web页面展示
l 监控告警:电话,邮件,微信,短信
要监控什么
硬件监控
1)通过远程控制卡:Dell的IDRAC
2)IPMI(硬件管理接口)监控物理设备。
3)网络设备:路由器、交换机
温度,硬件故障等。
系统监控
CPU,内存,硬盘利用率,硬件I/O,网卡流量,TCP状态,进程数
应用监控
Nginx、Tomcat、PHP、MySQL、Redis等,业务涉及的服务都要监控起来
日志监控
系统日志、服务日志、访问日志、错误日志,这个现成的开源的ELK解决方案,会在下一章讲解
安全监控
1)可以利用Nginx+Lua实现WAF功能,并存储到ES,通过Kibana可视化展示不同的攻击类型。
2)用户登录数,passwd文件变化,其他关键文件改动
API监控
收集API接口操作方法(GET、POST等)请求,分析负载、可用性、正确性、响应时间
业务监控
例如电商网站,每分钟产生多少订单、注册多少用户、多少活跃用户、推广活动效果(产生多少用户、多少利润)
流量分析
根据流量获取用户相关信息,例如用户地理位置、某页面访问状况、页面停留时间等。监控各地区访问业务网络情况,优化用户体验和提升收益
Prometheus概述
Prometheus(普罗米修斯)是一个最初在SoundCloud上构建的监控系统。自2012年成为社区开源项目,拥有非常活跃的开发人员和用户社区。为强调开源及独立维护,Prometheus于2016年加入云原生云计算基金会(CNCF),成为继Kubernetes之后的第二个托管项目。
https://prometheus.io
https://github.com/prometheus
作为新一代的监控框架,Prometheus 具有以下特点:
多维数据模型:由度量名称和键值对标识的时间序列数据
PromSQL:一种灵活的查询语言,可以利用多维数据完成复杂的查询
不依赖分布式存储,单个服务器节点可直接工作
基于HTTP的pull方式采集时间序列数据
推送时间序列数据通过PushGateway组件支持
通过服务发现或静态配置发现目标
多种图形模式及仪表盘支持
Prometheus适用于以机器为中心的监控以及高度动态面向服务架构的监控。
Prometheus组成及架构
Prometheus Server:收集指标和存储时间序列数据,并提供查询接口
ClientLibrary:客户端库
Push Gateway:短期存储指标数据。主要用于临时性的任务
Exporters:采集已有的第三方服务监控指标并暴露metrics
Alertmanager:告警
Web UI:简单的Web控制台
数据模型
Prometheus将所有数据存储为时间序列;具有相同度量名称以及标签属于同一个指标。
每个时间序列都由度量标准名称和一组键值对(也成为标签)唯一标识。
时间序列格式:
{=, ...}
示例:api_http_requests_total{method="POST", handler="/messages"}
指标类型
Counter:递增的计数器
Gauge:可以任意变化的数值
Histogram:对一段时间范围内数据进行采样,并对所有数值求和与统计数量
Summary:与Histogram类似
指标和实例
实例:可以抓取的目标称为实例(Instances)
作业:具有相同目标的实例集合称为作业(Job)
scrape_configs:- job_name: 'prometheus'static_configs:- targets: ['localhost:9090']- job_name: 'node'static_configs:- targets: ['192.168.1.10:9090']
Prometheus部署
二进制 部署
下载最新版本的Prometheus,然后解压缩并运行它:
tar xvfz prometheus-*.tar.gz
cd prometheus-*
mv prometheus-* /usr/local/prometheus
系统服务
[Unit]
Description=https://prometheus.io
[Service]
Restart=on-failure
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml
[Install]
WantedBy=multi-user.target
常用命令
启动prometheus
./prometheus --config.file=prometheus.yml
检测配置文件
./promtool check config prome