Prometheus入门与进阶实践教程2024
参考资料1:https://pan.baidu.com/s/1FLteIxtDx3hEiokPn2A0vw 提取码: v1nn
参考资料2:https://share.weiyun.com/7hok43wM 密码:qkrm48
一、Prometheus的概念和发展史
Prometheus是一个开源的完整监控解决方案,本文将从指标抓取到查询及可视化展示,以及最后的监控告警,对Prometheus做一个基本的认识。
Prometheus发展速度很快,12年开发完成,16年加入CNCF,成为继K8s之后第二个CNCF托管的项目,目前Github 42k的 ,而且社区很活跃,维护频率很高,基本稳定在 1个月1个小版本的迭代速度。
二、Prometheus的特点
多维数据模型:由度量名称和键值对标识的时间序列数据
时序数据,是在一段时间内通过重复测量(measurement)而获得的观测值的集合;将这些观测值绘制于图形之上,它会有一个数据轴和一个时间轴;
服务器指标数据、应用程序性能监控数据、网络数据等也都是时序数据;
1.内置时间序列(pime series)数据库:Prometheus;外置的远端存储通常会用:InfluxDB、openTsDB等
2.promQL一种灵活的查询语言,可以利用多维数据完成复杂查询
3.基于HTTP的pull(拉取)方式采集时间序列数据
4.同时支持PushGateway组件收集数据
5.通过服务发现或者静态配置,来发现目标服务对象
6.支持作为数据源接入Grafana
三、Prometheus 优势
易于管理:
Prometheus核心部分只有一个单独的二进制文件,不存在任何的第三方依赖(数据库,缓存等等);
唯一需要的就是本地磁盘,因此不会有潜在级联故障的风险。
强大的查询语言 PromQL:
Prometheus 内置一个强大的数据查询语言 PromQL,通过 PromQL 可以实现对监控数据的查询、聚合。
同时 PromQL 也被应用于数据可视化(如 Grafana)以及告警中。
高效:
对于监控系统而言,大量的监控任务必然导致有大量的数据产生。而 Prometheus 可以高效的处理这些数据。
可扩展:
Prometheus 支持联邦集群,可以让多个 Prometheus 实例产生一个逻辑集群;
当单实例 Prometheus 处理的任务量过大时,通过使用功能分区(sharding)+ 联邦集群(federation)可以对其进行扩展。
易于集成:
目前官网提供了多种语言的客户端 SDK,基于这些 SDK 可以快速让应用程序纳入到监控系统中,同时还支持与其它的监控系统集成。
可视化:
Prometheus Server 自带一个 UI,通过这个 UI 可以方便对数据进行查询和图形化展示;
同时还可以对接 Grafana 可视化工具展示精美监控指标。
四、服务注册
被监控服务在Prometheus中是一个Job存在,被监控服务的所有实例在Prometheus中是一个target的存在,所以被监控服务的注册就是在Prometheus中注册一个Job和其所有的target,这个注册分为:
静态注册
动态注册
静态注册:静态的将服务的IP和抓取指标的端口号配置在Prometheus yaml文件的scrape_configs配置下
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
以上就是注册了一个名为prometheus的服务,这个服务下有一个实例,暴露的抓取地址是localhost:9090
动态注册:动态注册就是在Prometheus yaml文件的scrape_configs配置下配置服务发现的地址和服务名,Prometheus会去该地址,根据你提供的服务名动态发现实例列表,在Prometheus中,支持consul,DNS,文件,K8s等多种服务发现机制。 基于consul的服务发现:
- job_name: "node_export_consul"
metrics_path: /node_metrics
scheme: http
consul_sd_configs:
- server: localhost:8500
services:
- node_exporter
我们consul的地址就是:localhost:8500,服务名是node_exporter,在这个服务下有一个exporter实例: localhost:9600
五、Prometheus实战教程:监控mysql数据库
安装mysql数据库
上传mysql安装包到指定目录下,并创建data etc tmp log目录
tar -zxvf mysql-5.7.31.tar.gz
cd mysql-5.7.31
mkdir data etc tmp log
上传my.cnf,修改本地路径后、端口号等,进行保存
[mysqld]
server_id = 2
binlog_format=Mixed
read_rnd_buffer_size = 128M
federated
basedir = /app/mysql/mysql-5.7.31 ###################### 重要 !按实际目录配置
datadir = /app/mysql/mysql-5.7.31/data ####################### 重要 !按实际目录配置
socket = /app/mysql/mysql-5.7.31/tmp/mysql-5308.sock ################## 按安装目录名+sock,统一放置于/tmp下
init_connect='SET collation_connection = utf8_general_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_general_ci
skip-character-set-client-handshake
lower_case_table_names=1
max_connections = 1000
wait_timeout=180
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
port = 5308 ####################### 重要 !按实际目录配置
#skip-grant-tables
#default_authentication_plugin=mysql_native_password
tmp_table_size = 512M
event_scheduler=1
join_buffer_size = 512M
log_bin_trust_function_creators=1
read_rnd_buffer_size = 32M
sort_buffer_size = 64M
innodb_buffer_pool_size = 2048M
innodb_log_file_size = 64M
innodb_file_per_table=1
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 256M
key_buffer_size = 256M
read_buffer_size = 32M
max_allowed_packet = 100M
max_heap_table_size= 256M
#binlog_expire_logs_seconds=432
#query_cache_size = 512M`
[client]
default-character-set=utf8
port = 5308 ################################# 根据实际修改
[mysql]
default-character-set=utf8
[mysql.server]
user=mysql ############################# 在哪个用户下安装就是哪个
log-err
#log
log-slow-queries
log-update
有疑问加站长微信联系(非本文作者)
![](https://static.golangjob.cn/static/img/footer.png?imageView2/2/w/280)