ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:550.06KB ,
资源ID:10705746      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10705746.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于Prometheus的云上MySQL监控实践.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于Prometheus的云上MySQL监控实践.docx

1、基于Prometheus的云上MySQL监控实践 基于 Prometheus 的云上 MySQL 监控实践 一、背景MySQL 8.0是当前Oracle公司一直在大力宣传的新版本,从架构到性能均有显著变化,同时,随着kubernetes的普及,为更好的提升资源利用率,可以进行MySQL上云的探索。MySQL上云如何进行运行状态的监控呢?MySQL运行状态监控需要满足:监控数据实时准备,报警机制响应迅速,支持异地集中监控。本文将探索云上MySQL的监控方案。二、方案对比方案一:Zabbix监控系统,基于c+php开发的开源监控系统,支持多种监控采集方式,应用广泛,支持比较成熟,社区活跃,缺点是对

2、容器支持度比较差。方案二:Prometheus监控系统,基于go开发的开源监控系统,支持pull和push两种采集模式,有完整的监控、报警、展示、数据异地传输能力,配置简单,对容器支持良好。由于目前使用的MySQL在云上部署,而且公司现有对PaaS云监控基于Promehteus,因此,方案二是更佳选项,既能满足MySQL监控,又能充分利用现有资源。三、Prometheus监控系统概述Prometheus是由SoundeCloud公司基于go语言开发的一款开源的监控报警解决方案,基于时间序列监控数据。1、组件及架构组件:promethues server:主要获取和存储时间序列数据Exporte

3、rs(导出器):主要是作为agent收集数据发送到prometheus server,不同的数据收集由不同的exporters实pushgateway:允许短暂和批处理的jobs推送它们的数据到prometheus;然后由prometheus拉取数据。alertmanager:实现prometheus的告警功能。组件间关系如下:图1 组件架构图2、Prometheus特点指标收集:prometheus服务器定义了名为目标(target)的配置,执行抓取所需要的信息。服务发现:可以通过通过多种方式来处理要监控的资源。包括:静态资源列表、基于文件发现、自动发现。聚合和报警:在服务器上可以查询和聚合

4、时间序列数据。通过规则记录常用的查询并做聚合。可以设置报警规则,满足报警条件时会触发报警,把报警信息推送的alertmanager。自治:不依赖分布式存储,单个服务器节点是自主的。冗余和高可用性:可部署多台prmehteus服务器,实现监控系统的高可用性。查询语言:prometheus服务器提供了查询语言PromQL,用于对时序数据进行筛选和运算。可视化:prometheus内置表达式浏览器可提供可视化,可与grafana配合实现监控数据可视化展示。四、MySQL数据库监控1、监控方案Prometheus官方提供了mysqld_exporter导出器,可实现对MySQL监控。该导出器通过MyS

5、QL用户连接数据库,查询相关数据库表、状态信息,通过http服务的方式暴露监控数据。方案不足:导出器可实现单节点和主从复制相关监控项,但对于MGR模式相关监控目前还不能很好地支持。方案改进:prometheus提供了client libraries,可实现对监控指标进行定制化采集。故可用python语言定制脚本的方式采集MGR相关数据。mysqld_exporter与python脚本能够满足全部监控信息的导出。2、部署方案关于Paas云上MySQL监控部署,有两种方案:方案一:MySQL、mysqld_exporter、my_exporter_python监控脚本三部分同在一个镜像中,运行该容

6、器可实现对MySQL的监控。方案二:MySQL、mysqld_exporter、my_exporter_python监控脚本分别属于不同的镜像,MySQL主容器与监控容器按顺序运行。监控容器以sidecar的方式访问MySQL。方案对比:MySQL数据库服务对于应用是非常重要的一环,要确保MySQL安全可靠。方案一,如果MySQL异常或出现错误,对问题诊断与排错方面,监控导出器可能会干扰项,不利于后期MySQL运维管理。方案二,由于三部分在不同的容器中运行,不会产生互相干扰的可能性,因此方案二为最佳。五、监控具体实现1、创建MySQL监控用户并授权2、my_exporter_python脚本说

7、明9000端口提供http提供服务start_http_server(9000)设置Gauge对象连接接MySQL查询数据设置MGR相关的metrics3、镜像拉取与定制mysqld_exporter镜像pull:docker pull prom/mysqld_exportermy_exporter_python镜像制作Dockerfile内容FROM centos7_python36:v1RUN pip install prometheus_client pymysqlRUN pip install requestsCOPY ./my_exporter_python_v2.py /my_ex

8、porter_python_v2.pyWORKDIR /EXPOSE 9000CMD python,my_exporter_python_v2.py4、镜像部署yaml文件部分内容:apiVersion: apps/v1kind: StatefulSetmetadata:. containers: - env: - name: TZ value: Asia/Shanghai - name: DATA_SOURCE_NAME value: exporter:userpassword(localhost:3306)/ - name: TARGET value: http:/localhost:91

9、04/metrics image: registry.paas.test.abc/library/mysqld-exporter-python:v5 imagePullPolicy: Always name: mysqld-python ports: - containerPort: 9000 name: mysqld-python protocol: TCP resources: limits: cpu: 2 memory: 4Gi terminationMessagePath: /dev/termination-log terminationMessagePolicy: File - en

10、v: - name: TZ value: Asia/Shanghai - name: DATA_SOURCE_NAME value: testuser:userpassword(localhost:3306)/ image: registry.paas.test.abc/library/mysqld-exporter:latest imagePullPolicy: Always name: mysqld-exporter ports: - containerPort: 9104 name: mysqld-exporter protocol: TCP resources: limits: cpu

11、: 2 memory: 4Gi terminationMessagePath: /dev/termination-log terminationMessagePolicy: File.5、Prometehus server设置target- job_name: kubernetes-pods scrape_interval: 30s scrape_timeout: 10s metrics_path: /metrics scheme: http kubernetes_sd_configs: - api_server: null role: pod namespaces: names: relab

12、el_configs: - source_labels: _meta_kubernetes_pod_annotation_prometheus_io_scrape separator: ; regex: true replacement: $1 action: keep - source_labels: _meta_kubernetes_pod_annotation_prometheus_io_path separator: ; regex: (.+) target_label: _metrics_path_ replacement: $1 action: replace - source_l

13、abels: _address_, _meta_kubernetes_pod_annotation_prometheus_io_port separator: ; regex: (:+)(?:d+)?;(d+) target_label: _address_ replacement: $1:$2 action: replace - separator: ; regex: _meta_kubernetes_pod_label_(.+) replacement: $1 action: labelmap - source_labels: _meta_kubernetes_namespace sepa

14、rator: ; regex: (.*) target_label: kubernetes_namespace replacement: $1 action: replace - source_labels: _meta_kubernetes_pod_name separator: ; regex: (.*) target_label: kubernetes_pod_name replacement: $1action:replace六、采集指标解释查询mysql上线时间mysql show status like %uptime%;+-+-+| Variable_name | Value |

15、+-+-+| Uptime | 1284686 | Uptime_since_flush_status | 1284686 |+-+-+Uptime即为mysql上线时间,单位为秒,对应输出的监控指标为:Mysql_uptime。可以对监控指标运算得到相应时间单位,例如转为天数,mysql_uptime/60/60/24。查询mysql服务端口mysqlmysql show variables like port;+-+-+| Variable_name | Value |+-+-+| port | 3306 |+-+-+对应输出监控指标为:mysql_global_variables_por

16、t查看mysql服务器是否在线如果mysqld_exporter连接mysql服务器成功,表示服务器在线,否则表示离线状态,对应输出的监指标:mysql_up。数值为1表示在线,数值0表示离线。查看数据库连接数mysql show status like Threads%;+-+-+| Variable_name | Value |+-+-+| Threads_cached | 2 | Threads_connected | 1 | Threads_created | 3 | Threads_running | 2 |+-+-+mysql show variables like %max_co

17、nnection%;+-+-+| Variable_name | Value |+-+-+| max_connections | 151 | mysqlx_max_connections | 100 |+-+-+mysql show global status like max_used_connections;+-+-+| Variable_name | Value |+-+-+| Max_used_connections | 3 |+-+-+Thread_connected:表示打开的链接数,对应输出的监控指标为:mysql_global_status_threads_connected。

18、Threads_running:表示激活的连接数,并发数,对应输出的监控指标为:mysql_global_status_threads_running。max_used_connections:表示当前使用过的最大连接数,对应输出的监控指标为:mysql_global_status_max_used_connections。max_connections:表示并发执行的最大连接数,对应输出的监控指标为:mysql_global_variables_max_connections。查看慢查询数量mysql show global status like %Slow_queries%;+-+-+|

19、 Variable_name | Value |+-+-+| Slow_queries | 0 |+-+-+对应输出监控指标为:mysql_global_status_slow_queries此指标为当前慢查询的总数,如果想要更精确的显示慢查询额状态,可以使用promQL,将监控指标显示为每秒慢查询的数量,可以如下所示:irate(mysql_global_status_slow_queries5m),显示5分钟内,每秒慢查询的数量。查询QPSmysql show global status like questions; +-+-+| Variable_name | Value |+-+-+

20、| Questions | 407158 |+-+-+Questions:表示为收到的总请求的次数,对应输出的监控指标为:mysql_global_status_questions。如果想要得到没秒请求的数量,可以如下方法所示:irate(mysql_global_status_questions5m),显示5分钟内每秒请求的数量,即QPS。查询innodb_buffer_pool命中率mysql show global status like innodb_buffer_pool_read%;+-+-+| Variable_name | Value |+-+-+| Innodb_buffer

21、_pool_read_ahead_rnd | 0 | Innodb_buffer_pool_read_ahead | 0 | Innodb_buffer_pool_read_ahead_evicted | 0 | Innodb_buffer_pool_read_requests | 19268 | Innodb_buffer_pool_reads | 887 |+-+-+Innodb_buffer_pool_reads:表示直接从磁盘读的次数,对应输出的监控指标为:mysql_global_status_innodb_buffer_pool_reads。Innodb_buffer_pool_r

22、ead_requests:表示逻辑读的次数,对应输出的监控指标为:mysql_global_status_innodb_buffer_pool_read_requests。计算逻辑读的命中率,公式为:100 - 100 * (mysql_global_status_innodb_buffer_pool_reads/mysql_global_status_innodb_buffer_pool_read_requests)。查询打开表的数量mysql show global status like open_tables;+-+-+| Variable_name | Value |+-+-+| O

23、pen_tables | 371 |+-+-+对应输出的监控指标为:mysql_global_status_open_tables查询表缓存命中率mysql show global status like threads_created;+-+-+| Variable_name | Value |+-+-+| Threads_created | 3 |+-+-+mysql show global status like connections;+-+-+| Variable_name | Value |+-+-+| Connections | 33479 |+-+-+Threads_creat

24、ed:表示创建过的线程数,对应输出的监控指标为:mysql_global_status_threads_created。Connections:表示试图链接mysql服务器的次数,对应输出的监控指标为:mysql_global_status_connections。表缓存命中率为:(1-mysql_global_status_threads_created/mysql_global_status_connections)*100 。查询锁状态mysql show global status like table_locks%;+-+-+| Variable_name | Value |+-+-

25、+| Table_locks_immediate | 156335 | Table_locks_waited | 0 |+-+-+Table_locks_immediate:表示行锁总数量,对应输出监控指标为:mysql_global_status_table_locks_immediate,可以计算每秒行锁数量,如:irate(mysql_global_status_table_locks_immediate5m)。Table_locks_waited 表示为表锁数量,对应输出监控指标为:mysql_global_status_table_locks_waited。查询临时表状态mysql

26、show global status like %tmp%;+-+-+| Variable_name | Value |+-+-+| Created_tmp_disk_tables | 0 | Created_tmp_files | 6 | Created_tmp_tables | 111563 |+-+-+Created_tmp_disk_tables:表示为创建磁盘临时表数量,对应输出监控指标为:mysql_global_status_created_tmp_disk_tables。Created_tmp_tables:表示服务器内部创建临时表的数量,对应输出指标为:mysql_global_st

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1