prometheus+grafana监控mysql最佳实践
导航
感谢您的阅读,预计阅读时长3min。 智客工坊出品必属精品。
引子
互联网时代,一切以互联网为核心,IT的边界被完全打开,IT系统不再是为企业内部管理提供支撑,而是为亿万互联网用户提供各种线上服务。因此,IT部门成为了互联网企业的核心,而保障线上业务持续、稳定运行,也是互联网企业的第一使命。
故障发生时,要求互联网运维能够第一时间发现问题,并快速定位问题。依靠人工巡检的传统运维管理方式严重落后,因此,自动化运维逐渐流行。这就对互联网运维工程师的开发能力提出了更高的要求,熟悉Python之类的脚本语言只是基础,玩得转各种开源监控系统,能够根据业务特点和企业需求定制开发自动化监控和告警工具。
今天我们就来一起认识一个开源监控工具——Prometheus
在开始之前,我们先来欣赏一下prometheus监控报表图:
前言
什么是Prometheus?
Prometheus是最初在SoundCloud上构建的开源系统监视和警报工具包。自2012年成立以来,许多公司和组织都采用了Prometheus,该项目拥有非常活跃的开发人员和用户社区。现在,它是一个独立的开源项目,并且独立于任何公司进行维护。为了强调这一点并阐明项目的治理结构,Prometheus于2016年加入了云原生计算基金会,这是继Kubernetes之后的第二个托管项目。
从全局视角了解云原生生态可以直接看CNCF全景图。
特性
Prometheus的主要特性:
- 一个多维数据模型,其中包含通过度量标准名称和键/值对标识的时间序列数据
- PromQL,一种可利用此维度的灵活的查询语言
- 不依赖分布式存储;单服务器节点是自治的
- 时间序列收集通过HTTP上的拉模型进行
- 通过中间网关支持推送时间序列
- 通过服务发现或静态配置发现目标
- 多种图形和仪表板支持模式
组件
Prometheus生态系统包含多个组件,其中许多是可选的:
- Prometheus server主服务器,它会抓取并存储时间序列数据
- client libraries,用于检测应用程序代码
- push gateway,一个支持短期工作的推送网关
- 诸如HAProxy,StatsD,Graphite等服务的exporters
- alertmanager,一个处理警报的报警器
- 各种各样的支持工具
架构
下图说明了Prometheus的体系结构及其某些生态系统组件:
Prometheus直接或通过中介推送网关从已检测作业中删除指标,以处理短暂的作业。它在本地存储所有报废的样本,并对这些数据运行规则,以汇总和记录现有数据中的新时间序列,或生成警报。Grafana或其他API使用者可以用来可视化收集的数据。
什么时候适合?
Prometheus可以很好地记录任何纯数字时间序列。它既适用于以机器为中心的监控,也适用于高度动态的面向服务的体系结构的监控。在微服务世界中,它对多维数据收集和查询的支持是一种特别的优势。
Prometheus的设计旨在提高可靠性,使其成为中断期间要使用的系统,以使您能够快速诊断问题。每个Prometheus服务器都是独立的,而不依赖于网络存储或其他远程服务。当基础结构的其他部分损坏时,您可以依靠它,并且无需设置广泛的基础结构即可使用它。
什么时候不合适
Prometheus重视可靠性。即使在故障情况下,您始终可以查看有关系统的可用统计信息。如果您需要100%的准确性(例如按请求计费),则Prometheus并不是一个好的选择,因为所收集的数据可能不够详细和完整。在这种情况下,最好使用其他系统来收集和分析数据以进行计费,并使用Prometheus进行其余的监视。
环境准备
环境准备
运维自动化已经不再是新鲜名词,特别是随着Devops思想的影响下,越来越多的互联网产品公司已经开始搭建属于自己的运维自动化平台,甚至个别公司已经走在了AIDevOps实践的路上。
早些年,互联网产品公司很多都要自建运维平台(财大气粗的公司),相关文章可以查看《运维自动化平台之路》,但是随着云服务的普及,云服务厂商也提供了更多运维付费服务(当然是收费的,价格也是不菲的)。比如,阿里云的日志服务,早期我们是需要自己搭建ELK的。但是,很多公司基于成本考虑,亦或是有一些自定义的需求,会选择一些开源运维系统,比如,jenkins来实现自动化部署,grafana,prometheus来做一些监控等。
本教程基于prometheus+grafana+mysqld_exporter来搭建mysql监控服务。
Prometneus服务器
- 一台centos 7 云服务器
- 安装Prometneus
- 安装grafana
被监控服务器
- 一台centos 7 云服务器,作为数据存储服务器
- 安装了mysql数据库
- 安装mysqld_exporter
Notes: 为了更加接近生产环境,建议选择云服务器,不要使用虚拟机。
本教程服务器配置如下:
- Linux 服务器版本
- 内存
- cpu 信息
安装Docker
Prometneus服务器
上一章节,我们已经提到Prometneus服务器。
- 一台centos 7 云服务器
- 安装docker
- 安装Prometneus
- 安装grafana
我们希望在该机器上安装Prometneus和grafana,然后通过他们管理和查看监控对象的报表。呈现结果如下:
yum安装docker
我们使用docker来安装Prometneus,所以首先得安装docker。
Notes: 安装步骤最好是参照docker官网。https://docs.docker.com/engine/install/centos/
(1) 卸载本机安装的所有版本的docker,如果机器之前没有安装过docker,可以跳过这步。
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
(2) 在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。之后,您可以从仓库安装和更新 Docker。
设置仓库
安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
(3) 使用以下命令来设置稳定的仓库(这里推荐国内阿里云的源)
$ sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
(4) 安装dokcer engin
$ sudo yum install -y docker-ce-cli
(4) 启动docker
$ sudo systemctl start docker
(5) 检测docker是否安装成功
$ sudo docker run hello-world
还可以通过检测docker是否安装成功
$ docker -v
也可以通过查看docker 状态
$ systemctl status docker
(6) 设置开机启动docker服务
$ systemctl enable docker