服务监控

为什么服务需要监控

监控进程状态
及时发现问题
掌握主动权

监控什么

1、进程运行状态
2、机器资源状态
(机器广义上包括PM/VM/Docker)
(资源包括cpu\memory\disk\network\io)

Linux下如何监控:  

a、磁盘 df -h
b、内存 free -g
c、cpu vmstat
d、网络 ifstat

磁盘情况

1、只有一块磁盘
tmpfs 临时文件系统
2、Etcd存储就是放在tmpfs上 性能非常好
操作系统内部临时的文件系统
3、124分区不同
4、如果三个磁盘是这样的 sda1 sdb2 sdc3

内存情况

应用程序可用的内存是 free + buffer+cache

cpu情况一秒刷新一次

io、cpu空闲率 基本上在50%以下会比较好

网络情况

一块网卡就是etc0
两块网卡就是 etc0  etc1
In 进包 
out 发包

监控数据如何采集

  • 用户请求日志打印

  • 服务端数据上报

  • 前端页面数据埋点

日志规范

  • 格式key=value
  • 空格分割key=value对

服务传统监控手段

1、进程活着 但不代表正常运行即可能存在进程假死的情况
2、通过语义监控保证进程不是假死状态即模拟用户对接口发出请求
3、服务稳定的表现是每分钟错误量都是固定的
4、数据波动监控 比如数据流量突然增加了50% 可能是别人通过爬虫调用你的接口

进程监控

进程是否存活

  • 原始解决方案
1、ps -aux|grep 进程名
2、不断轮询 没有输出解决触发告警
  • 优雅解决方案
Linux daemontools supervise
supervise监控启动方法
父进程 fork 开启子进程
子进程退出 发送一个signal给父进程
supervise 是二进制文件代表父进程

弊端

解决不了进程假死问题 仅仅监控进程是否还活着

语义监控

错误日志监控

相对通用的解决方案

数据波动监控

解决方案

1、环比:和昨天相比
2、同比:和上周的今天相比
3、每天几百T或上P的数据量 监控系统推荐使用小米开源的open-falcon
4、大数据处理
a、实时流计算 spark
b、离线批量计算 mapreduce
c、实时+批量 flink
d、阿里基于flink开源了Blink

优秀开源监控框架

1、ZABBIX主要用于Mysql监控
2、Prometheus、Grafana主要用于监控TiDB
3、其他监控场景使用falcon

Open-Falcon

特点

自动发现就是发现监控项
主动往agent上推送数据

系统架构

输入监控命令

Dashboard

配置模型基本信息

多纬度立体监控

多视角监控

层次和维度

通用监控项

  • 机器指标
  • JVM指标
  • 进程指标
  • DB指标

业务监控项

比如监控发布次数
商品信息中包含的非法字符个数
红包使用次数

立体监控特点

  • 业务隔离 原逻辑不动

  • 随时修改 即时生效

  • 运行时不占用资源 零消耗

传统监控系统无法理解业务
不满足业务级监控需求

目标

立体监控业务层面设计于实践

方案选择

  • 本地日志
  • 日志平台
  • 立体监控平台

日志平台VS立体监控

职责边界

接入方
  • 定义监控目标
  • 监控数据产生
平台方
  • 分布式环境中数据汇总
  • 告警条件对比与发出告警
  • 数据存储方案
  • 图形化展示

抽象监控规范

名称术语

聚合算法

约定规则

立体架构

1、业务环境:网关层、业务逻辑层、数据访问层、数据存储层
2、代理即是一个jar包
3、代理与数据收集服务 UDP协议通信
4、立体监控平台即是一个Web服务

业务接入与Agent

1、一个机器有一个agnet
所有的应用都和这个agent通讯 使用UDP协议
2、用go实现agent是业内标准 
本身是damon程序
稳定性和性能很好
Agent聚合方法
聚合内存

优点

  • 无通讯协议开销
  • 全局锁
  • 固定内存
聚合内存c语言应用用的比较多 对Java应用意义不大
TCP传输

优点

  • 可靠传输
  • 容错方案
  • 存储模型
tcp同步阻塞模型可能会阻塞进程
对日志传输意义不大
UDP传输

优点

  • 直接仍
  • 对业务流程无阻塞
  • 模型简单
1、本地做些计算 再扔给远端
2、对敏感性、时效性要求不高可以使用UDP方式

业务方使用

监控以下函数

  • 调用次数
  • 平均耗时
  • 最大耗时
  • 异常次数

硬编码方式(不推荐)

注解方式

通过Springboot\Guava 15.0+\Aspectj1.5.4+实现

监控组合

监控项和机器列表任意组合

自动采集JVM监控数据

可用内存
堆大小
耗时

服务器监控

利用率 
机器负载
内存利用率
磁盘利用率

告警设置

最终示例

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值