TiDB-OPS

TiDB 监控架构

通过本篇文档学习 TiDB 集群监控架构 (默认按照 TiDB-ansible 部署为准) 本篇文档按照 2019 年中 TiDB-ansible master branch 描述;区别在于是否有 pushgateway 组件 (端口 9091)

一、TiDB 监控架构介绍

TiDB 使用开源时许数据库 Prometheus 组件存放监控数据 使用开源数据图形可视化工具 Grafana 做数据展示 接下来让我们看下该套监控是如何运作得……

monitor

1.1 组件介绍

1.2 监控组件端口

1.3 TiDB Metrics 组件端口

二、Prometheus 时序数据库

Prometheus-Frame

2.1 Prometheus 介绍

注意

2.3 Prometheus 官方以及第三方资料片

三、Grafana 可视化工具

为 Graphite、OpenTSDB、InfluxDB、Prometheus、Elasticsearch、MySQL 等监控提供度量分析和仪表板可视化工具

3.1 工具基础功能

用户权限

权限等级 权限等级说明
Viewer 只能查看 Grafana 已经存在的面板而不能编辑
Editor 可以编辑面板
Admin 拥有全部权限例如添加数据源、添加插件、增加 API KEY

grafana 用户权限与 dashboard 页面权限需要配合设置才能做到部分用户查看 a 页面,部署用户查看所有页面;设置时会比较繁琐

面板展示 (Dashbord)

Grafna-dashboard 组成

报警(Alert)

Grafana 在 4.0 版本后增加了报警功能,不过 Grafana 的报警属于数据源的后置查询且只能出发一次告警,容易在大量告警时被淹没,实时性不大能满足需求。不过可以设置一些告警指标,用于在 dashboard 上可视化巡检使用。

误差

该部分引用 Grafana 的一些使用技巧

这里有一个常见的 Grafana 误区,因为经常有用数值类型的 count_ps(每秒的数量) 来顺便获取每秒打点数量的情况,注意在这种情况下,一段时间内的打点总量需要使用 count_ps(每秒的数量) 的 avg 平均值来乘以这段时间的秒数来计算,而不是通过界面上的 Total 直接读取。

这是因为,在界面上一条曲线能够展示的点的数量是有限的,Grafana 会根据你的窗口宽度来决定返回的点数,因为像一天这样的时间段肯定没办法在界面上展示每一秒的点,毕竟总量为 86400 个点就算带鱼屏也不可能挤得下。对于无法展示的点,Grafana 默认是使用 avg 平均值的行为来修正返回点的值,举个栗子,如下图:

Grafna

上图时间范围是一天,上部分为曲线面板的值,下部分为 面饼图表的值,并且上部分图标的曲线为 count 类型(十秒聚一次),可以看到 avg 平均值为 683,那么总量应该为 682 乘以 6 (如果是 count_ps(每秒的数量) 这里则是 60) 乘以 60 (一小时 60 分钟)再乘以 24 (一天 24 小时)得到 589 万,与图片中下部分的 582 万相近,因此上部分 total 的 117 万是一个完完全全让人误解的值,可以认为它毫无意义进而直接无视掉。

我们计算出来的 589 万和界面上的 582 万其实也有一点误差,不过这是可以接受的,因为 statsd 一般情况下是 UDP 的形式(它其实有 TCP 的形式),所以如果想要完全正确的数据,那么最好把打点相关的数据也入库,从数据库里后置查询出来的才是完全可靠。

3.2 Grafana 资料片

四、其他

4.1 Grafana 忘记密码

4.1.1 重新部署一套 Grafana 服务

4.1.2 使用 Grafana ctl 工具修改

4.1.3 通过 sql lite 修改数据库

使用 sql lite 工具修改 Grafana.db ; 执行以下步骤会强制将 Grafana 管理员密码重置为 admin

  1. 停止 Grafana 服务
  2. 通过 grafana.ini 配置文件找到 grafana.db 实际目录
    • 通过 find / -name "grafana.db" 查找,需要确保是 grafana.ini 文件中引用的
    • ini 文件默认在 /opt/grafana/conf/grafana.ini
    • db 文件默认在 /data.grafana/grafana.db
  3. 通过 sqllite cliet 链接数据库修改密码

     # sqlite3 /data.grafana/grafana.db
    
     sqlite> select salt, password from user;
     pyaUhfDzYg|54c7d1ce2eeaa6000bd84407d0f8ab4663dfa575e0a326bc70dc5cab4b864f6677b21879dbf5e33427c88f9160f744b625bf
    
     sqlite> update user set password = '59acf18b94d7eb0694c61e60ce44c110c7a683ac6a8f09580d626f90f4a242000746579358d77dd9e570e83fa24faa88a8a6', salt = 'F3FAxVm33R' where login = 'admin';
    
     sqlite> .exit
    

4.1.4 暴力重置 Grafana db

该方式与 4.1.1 结果相同,会丢失 dashboard 信息

  1. 停止 Grafana
  2. 找到 grafana.ini 文件,并将 grafana.ini 文件中 admin_password 修改为 admin
  3. 删除掉 grafana.db 文件;文件默认在 /data.grafana/grafana.db
  4. 重启 Grafana 服务
  5. 可选步骤 // 通过 tidb-ansible 脚本导入 dashboard
    • 只有当前 Grafana 是通过 tidb-ansible 部署时才可使用
    • 执行 ansible-playbook start.yml --tags=grafana 导入
  6. 可选步骤 // 手动导入 dashboard
    • 登陆 grafana ui ,添加监控数据源,如 Prometheus
    • 登陆 grafana ui ,选择 import dashboard

4.2 Prometheus 清理遗留数据