Prometheus在金融行业的应用

Prometheus在金融行业的应用

1. Fintech技术沙龙 金融级数据库与运维实践-上海站 Prometheus金融场景应用 刘宇 20190921 1
2. 自我介绍 n n 个人介绍 n 现就职于甜橙金融创新中心 n 不是大牛,只是一直走在追赶大牛的路上 我能提供的 n Prometheus知识分享 n 帮助更多的IT从业者 2
3. 目录 n 背景 n 原理介绍 n 使用场景 n 可视化 3
4. 背景 Zabbix监控系统面临的问题 n 服务器和业务的增长,引发问题: n 随着容器技术的发展,更多问题: n 1. DB性能瓶颈 n 1. 容器如何监控? n 2. 管理成本高 n 2. 微服务如何监控? n 3. 易用性差 n 3. 集群性能如何进行分析计 n 4. 告警风暴 算? n 4. 如何管理agent端大量配 置脚本? 4
5. 原理 n 什么是prometheus n 2016年由Google发起Linux基金会旗下的 n 1. 非常少的外部依赖,安装使用超简单 原生云基金会(Cloud Native Computing n 2. 服务自动化发现 n 3. 可以直接集成到代码 n 4. 设计思想是按照分布式、微服务架构来 Foundation), 将Prometheus纳入其下第 二大开源项目。 n Prometheus强大的地方就在于可以使用很 多计算公式去获取自己需要的数据。正因 n 优点 实现的 为涉及到了计算公式,这也是它的难点所 在。 n Prometheus目前在开源社区相当活跃。 n Prometheus是由SoundCloud开发的开源 监控报警系统和时序列数据库(TSDB)。 Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。 5
6. 原理 n n Prometheus server: 用于抓取数据,并存 Prometheus架构和生态系统组件如下: 储到时序数据库 n Client librabries:用 于一些应用的定制化 监控 n Push gateway:用于 短生存周期的job推送 自定义WEB UI n Exporter:安装在监 控目标上,为server提 供数据抓取的接口, 业务监控 Metric 支持定制化 n Alertmanager:通用 告警功能用于实时处 理警报 6
7. 原理 n metrics数据格式 n <metric name>{<label name>=<label value>, ...} n api_http_requests_total{method="POST", handler="/messages"} n # TYPE ops_durations_seconds summary n ops_durations_seconds{service="service1",instance="aa"} 7.55823964126038e-07 n ops_durations_seconds{service="service1",instance="bb"} 2.6110063096397233e-06 n ops_durations_seconds{service="service2",instance="cc"} 4.1856147763703275e-06 n ops_durations_seconds{service="service1",instance="dd"} 0.00020646687333031658 7
8. 原理 n 服务发现 n 监控的目标是动态的 n 服务发现(service discovery)就是为了解决此类需求出现的, prometheus能够主动感知系统增加、删除、更新的服务,然后自动将 目标加入到监控队列中 8
9. 原理 n 服务发现 9
10. 原理 n 服务发现 10
11. 原理 Consul n n 通过http post n n Kubernetes 通过配置api-server信息 - job_name: node_exporter metrics_path: /metrics consul_sd_configs: - server: localhost:8500 services: - node_exporter 11
12. 原理 File n - job_name: 'file_ds' file_sd_configs: n Prometheus当前不支持的配置中心? n 通过http post - refresh_interval: 1m files: - targets.json [ { "targets": [ "localhost:8080"], "labels": { "env": "localhost", "job": "cadvisor" } }, ] 12
13. 场景应用 n Prometheus高可用 n 两个或以上的Prometheus Server n 监控同样的内容 n Job配置相同 n 告警配置相同 target Prometheus target Prometheus target 13
14. 场景应用 n Alertmanager单独部署 n 通过gossip协议 target alertmanager Prometheus target alertmanager Prometheus target alertmanager 14
15. 场景应用 n Alertmanager收敛 n 分组 n 抑制 n 静默 15
16. 场景应用 Alertmanager收敛 n n 分组 n 减少告警消息数量 n 同类告警聚合 receiver: webhook {alertname=”server_cpu_idle” job=”node”} {alertname=”server_cpu” job=”node”} {alertname=”server_uptime” job=”mysql”} {alertname=”server_cpu_idle” job=”node”} {alertname=”server_cpu” job=”node”} {alertname=”server_uptime” job=”mysql”} group_by: ['job'] group_wait: 30s group_interval: 5m repeat_interval: 3h webhook webhook 16
17. 场景应用 n Alertmanager收敛 n 抑制 n 消除冗余告警 inhibit_rules: - source_match: alertname: 'server_uptime' target_match: 主机1告警 {alertname=”server_uptime” server=”server1”} 主机1MySQL服务告警 {alertname=”mysql_uptime” server=”server1”} server 抑制 mysql 主机1告警 {alertname=”server_uptime” server=”server1”} alertname: 'mysql_uptime' equal: ['server'] 17
18. 场景应用 n Alertmanager收敛 n 静默 n 阻止发送预期告警 n 维护动作时可用 需要在alertmanager的图形界面上进行填 写。不可以配置文件配置。 实例1,实例2告警 静默实例1 实例2告警 18
19. 场景应用 报警 n 微信 n 短信 n 电话 n 邮件 Target Target Target Prometheu s Prometheu s alertmanager webhook 微信 webhook 报警中心 alertmanager alertmanager 短信 电话 邮件 19
20. 场景应用 webhook n 一个 webhook 配置文件alertmanager.yaml n global: n   resolve_timeout: 5m n route: n   group_by: ['alertname'] n   group_wait: 30s n   group_interval: 5m n   repeat_interval: 12h n   receiver: 'webhook' n receivers: n - name: 'webhook' n   webhook_configs: n   - url: 'http://localhost:5000/send'  20
21. 场景应用 联邦集群 n TiDB n MySQL n ORDS Prometheus Pull Prometheus Prometheus Prometheus Consul Pull node_exporter node_exporter node_exporter rds_exporter ORDS 融入服务 TiDB mysqld_exporter MySQL物理机 cadvisor RDS(k8s 基于macvlan)
22. 场景应用 n exporter n 是个http服务器,可以用HTTP GET请求获取监控数据 n 运行于后台,可以被触发抓取监控数据 n 返回给prometheus的内容,需要满足prometheus的metrics类型(k-v) n key-value,要求返回float或int(string->nil) n 统一命名格式,即xx_exporter, 负责主机信息收集node_exporter n 详细可参考https://prometheus.io/docs/instrumenting/exporters/ 22
23. 场景应用 exporter的编写 n 除了直接使用社区提供的Exporter程序以外,用户还可以基于Prometheus提供的Client Library创建自己的Exporter程序,目前Promthues社区官方提供了对以下编程语言的支持: Go、Java/Scala、Python、Ruby。同时还有第三方实现的如:Bash、C++、Common Lisp、Erlang,、Haskeel、Lua、Node.js、PHP、Rust等。
24. 场景应用 n 采集器Collector接口的实现 type Collector interface { // 用于传递所有可能的指标的定义描述符 // 可以在程序运行期间添加新的描述,收集新的指标信息 // 重复的描述符将被忽略。两个不同的Collector不要设置 相同的描述符 Describe(chan<- *Desc) // Prometheus的注册器调用Collect执行实际的抓取参数的 工作, // 并将收集的数据传递到Channel中返回 // 收集的指标信息来自于Describe中传递,可以并发的执 行抓取工作,但是必须要保证线程的安全。 Collect(chan<- Metric) } 24
25. 场景应用 n package main n import ( log "github.com/Sirupsen/logrus" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" "net/http" ) 25
26. 场景应用 自定义监控的场景 26
27. 场景应用 27
28. 场景应用 pushgateway Push Pull Prometheus pushgateway 自定义Client脚本 http post Pull Prometheus exporter 28
29. 可视化 Grafana Dashboard 自定义监控 WEB UI Prometheus服务器 TargetA TargetB TargetC TargetD TargetX Exporter Exporter Exporter Exporter Exporter application-specific service metrics application-specific service metrics application-specific service metrics application-specific service metrics …… application-specific service metrics 29
30. 可视化 30
31. 可视化 31
32. 可视化 32
33. 可视化 33
34. THANK YOU! 34

联系我 - 工具首页
Copyright © 2011-2019 iteam. Current version is 2.57.1. GMT+0800, 2019-11-22 06:28
浙ICP备14020137号 $访客地图$