文章目录
- 说明
- Prometheus简介
- Grafana简介
- prometheus和Grafana的关系
- 环境准备(docker)
- docker安装
- 时间时区问题(我的代码中)
- dockers镜像加速和服务器时区设置
- 数据库准备(mysql、redis)
- mysql配置
- redis配置
- Prometheus、grafana下载和安装
- 拉取镜像
- 启动exporter容器
- 启动Prometheus
- 启动grafana
- 添加Prometheus数据源
- 添加监控模板
- Prometheus时区问题探讨
说明
- 感谢csdn博主北城 半夏的《基于docker部署Prometheus》教程,提供了很大的帮助和指导,同时我也参考网络其他资源和教程,进行实践和完善后总结此文,愿我们的共同进步,只为一份热情!!!
- 本文使用centos 7操作系统,使用1panel面板借助docker环境,安装Mysql、Redis数据库环境,借助Prometheus收集监控数据,最终通过Grafana借助图标等可视化展示数据
- 使用docker环境,保证对系统的侵入性和修改性降低到最低!本地环境安装,作者也做过一些尝试,操作麻烦,需要在系统上修改大量文件,同时设置系统服务启动时,遇到了棘手的权限问题!最终,选择使用docker环境快速部署!
- 当然,本文只是一些基本的部署和学习的指导,有关高级的学习,还请移步官网和大佬博客!
Prometheus简介
- Prometheus:一款开源的监控和警报工具,用于记录实时的指标数据并提供灵活的查询语言和仪表盘。最初由SoundCloud开发并于2012年发布。
- 设计目标:实现高度可靠性、可扩展性和简单性,应对大规模的分布式系统的监控需求。
- Prometheus采用拉取模型的方法,通过定期从目标服务中获取指标数据。支持服务发现,可以自动发现新的目标并开始监控。
- Prometheus提供了一个灵活的查询语言PromQL,可以对指标数据进行多维度的查询和聚合。
- Prometheus还提供了警报机制。用户可以定义自己的警报规则,并在指标达到特定条件时触发警报。警报可以通过电子邮件、Slack等方式进行通知。
- Prometheus是一个功能强大的监控和警报工具,适用于各种规模的分布式系统。它的开源特性和活跃的社区使得它成为了许多组织的首选监控解决方案。
Grafana简介
- Grafana是一个开源的数据可视化和监控分析平台,它提供了丰富的仪表盘和图表功能,用于展示和分析各种数据源的实时数据。Grafana支持多种数据源,包括Prometheus、InfluxDB、Elasticsearch、MySQL等。
Grafana的特点包括:
-
多数据源支持:Grafana可以从不同的数据源中获取数据,并将其集成在一个仪表盘中展示。
-
可视化丰富:Grafana提供丰富的可视化选项,包括折线图、柱状图、仪表盘等,用户可以根据需要自由选择并进行定制。
-
高度可配置:Grafana具有灵活的配置选项,用户可以自定义仪表盘、图表和警报规则,以适应各种监控和分析场景。
-
警报和通知功能:Grafana支持设置警报规则,并通过电子邮件、Slack等方式发送通知,以便及时响应和解决问题。
-
社区支持和活跃:Grafana是一个开源项目,拥有庞大的社区支持和活跃的开发者社区,用户可以在社区中获取帮助和分享经验。
Grafana是一个功能强大的数据可视化和监控分析工具,它能够帮助用户更好地理解和分析各种数据,并通过可视化展示和警报功能,实现对系统和应用程序的实时监控和优化。
prometheus和Grafana的关系
-
Grafana通常与Prometheus一起使用,用于可视化和分析Prometheus收集的监控数据。Prometheus是一个开源的系统监控和警报工具,它通过收集和存储时间序列数据来监控应用程序和系统的运行状态。
-
通过将Prometheus与Grafana集成,用户可以使用Grafana创建漂亮的仪表盘和图表,以直观的方式展示Prometheus收集的监控数据。这样,用户可以更方便地监控和分析系统的运行状况,并及时做出相应的调整和优化。
环境准备(docker)
docker安装
- 推荐直接安装1panel运维面板,在安装的过程中会一键安装docker环境,同时面板中提供应用商店和基本的docker管理功能!节省大量时间和操作成本,docker安装教程(请根据机器使用的系统选择不同的安装命令)
时间时区问题(我的代码中)
- NTP服务器和系统时区要求
- 对于系统的NTP服务器和时区设置,对于监控和报告的准确性和一致性是非常重要的。如果系统的时钟不准确或时区设置不正确,可能会导致监控数据的时间戳错误或显示不准确。
为了确保Grafana和Prometheus的正常运行,建议按照以下要求进行设置:
-
NTP服务器:确保系统上配置可靠的NTP服务器,并确保系统时钟与NTP服务器同步。这将确保监控数据的时间戳准确,并避免由于时钟不同步而导致的数据错误。
-
时区设置:确保系统的时区设置正确。如果Prometheus和Grafana运行在不同的服务器上,确保它们的时区设置保持一致,这样可以避免在数据展示和分析时出现时区混乱或不一致的情况。
- Can I change the timezone? Why is everything in UTC?
- To avoid any kind of timezone confusion, especially when the so-called daylight saving time is involved, we decided to exclusively use Unix time internally and UTC for display purposes in all components of Prometheus. A carefully done timezone selection could be introduced into the UI. Contributions are welcome.
我可以更改时区吗?为什么一切都是UTC?
为了避免任何类型的时区混淆,特别是当涉及到所谓的夏令时时,我们决定在Prometheus的所有组件中专门使用Unix时间和UTC来显示目的。可以在UI中引入一个精心设计的时区选择
dockers镜像加速和服务器时区设置
数据库准备(mysql、redis)
- 在1panel中选择安装即可,在配置页面记得勾选允许外部端口访问
- 其他相关的配置比较简单,作者就不再赘述!先安装mysql,再安装redis,记住初始设置root用户的密码,后续需要使用
- 记得服务勾选允许外部访问
mysql配置
- 使用配置容器界面的root密码,进入容器然后设置访问用户
mysql -u root -p
mysql> create user mysql_exporter@'%' identified with mysql_native_password by 'root';
mysql> GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysql_exporter'@'%';
mysql> flush privileges;
redis配置
- 默认安装redis时,1panel官方没有默认提供时区的设置,可以在高级选项中添加
- /etc/localtime:/etc/localtime
- 也可以在启动后,在编辑中手动添加,然后确定,重启容器
Prometheus、grafana下载和安装
拉取镜像
docker pull prom/node-exporter
docker pull prom/mysqld-exporter
docker pull google/cadvisor
docker pull prom/prometheus
docker pull grafana/grafana
docker pull bitnami/redis-exporter
启动exporter容器
# 启动node-exporter
docker run -d --name node-exporter --restart=always -p 9100:9100 -v "/proc:/host/proc:ro" -v "/sys:/host/sys:ro" -v "/:/rootfs:ro" prom/node-exporter
# 启动redis-exporter
docker run -d --name redis_exporter --restart=always -p 9121:9121 \
--network=1panel-network \
-e REDIS_ADDR=redis://局域网/公网服务器Ip:6379 \
-e REDIS_PASSWORD=redis服务器访问密码 \
-v /etc/localtime:/etc/localtime \
bitnami/redis-exporter
# 启动mysql-exporter
docker run -d --name mysqld_exporter --restart=always -p 9104:9104 \
-e DATA_SOURCE_NAME="mysql_exporter:root@(局域网/公网服务器Ip:3306)/" --network=1panel-network \
-v /etc/localtime:/etc/localtime \
prom/mysqld-exporter
# 启动cadvisor-exporter
docker run -v /:/rootfs:ro \
-v /var/run:/var/run:rw \
-v /sys:/sys:ro \
-v /var/lib/docker/:/var/lib/docker:ro \
-v /dev/disk/:/dev/disk:ro \
-p 9101:8080 \
-d --name=cadvisor-exporter --restart=always \
--network=1panel-network \
google/cadvisor:latest
- 运行容器后访问容器,
IP:port/metrics
查看收集的数据
# node-exporter
http://192.x.x.x:9100/metrics
# mysql-exporter
http://192.x.x.x:9104/metrics
# redis-exporter
http://192.x.x.x:9121/metrics
# cadvisor-exporter
http://192.x.x.x:9101/metrics
启动Prometheus
- 配置Prometheus.yml文件
mkdir /opt/prometheus
cd /opt/prometheus/
vim prometheus.yml
- 粘贴复制如下内容
global:
scrape_interval: 60s
evaluation_interval: 60s
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['localhost:9090']
labels:
instance: prometheus
- job_name: linux
static_configs:
- targets: ['192.168.x.x:9100']
labels:
instance: linux
- job_name: mysqld
static_configs:
- targets: ['192.168.x.x:9104']
labels:
instance: mysql
- job_name: redis
static_configs:
- targets: ['192.168.x.x:9121']
labels:
instance: redis
- job_name: cadvisor
static_configs:
- targets: ['192.168.x.x:9101']
labels:
instance: cadvisor
- 启动prometheus容器命令
# 启动prometheus
docker run -d --name prometheus --restart=always --network=1panel-network \
-p 9090:9090 \
-v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
- 访问url:
http://x.x.x.x:9090/targets
,查看服务连接情况,一般需要等一下,才可以都up
启动grafana
- 新建空文件夹grafana-storage,用来存储数据
mkdir /opt/grafana-storage
chmod 777 -R /opt/grafana-storage
# 启动grafana
docker run -d --name grafana --restart=always --network=1panel-network \
-p 3000:3000 \
-v /opt/grafana-storage:/var/lib/grafana \
-e TZ=Asia/Shanghai \
grafana/grafana
- 访问url:
ip:3000
,然后使用默认用户admin
和密码admin
登录,然后重新设置密码(也可以是admin
)
添加Prometheus数据源
- 点击Setting—>Add data source->选择Prometheus
- name:Prometheus
- type 选择Prometheus
- url 输入
http://IP:9090
,IP可以是服务器IP,也可以是Prometheus容器ip
- 点击测试与保存,显示数据源working,即为成功
添加监控模板
- 导入grafana监控模板,mysql监控模板id为7362;主机的监控模板,模板id为8919;容器的监控模板,模板id为179;redis监控模板id为11835;
- 官方模板网站地址
- 导入后即可使用,更多的使用和学习,还请大家继续学习!!
Prometheus时区问题探讨
- 原生的Prometheus查询指标时页面显示的指标趋势图是根据GMT时间显示的,与北京时间相差8小时,勾选本地时间后显示正常
- 但是在grafana上面显示的数据还是北京时间的时间