Prometheus-监控Mysql进阶用法(1)(安装配置)

本文介绍了如何在阿里云服务器上通过Docker容器化部署MySQL,配置Prometheus监控Mysql性能,并通过Grafana可视化监控数据,包括创建用户权限、安装探针及配置Grafana主题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

阿丹:

        在开发和生产环境中有可能会出现慢mysql等问题,那么这里就需要我们优秀的程序员来进行监控和解决,那么如何借助云原生的监控系统来完成这个操作呢?

       环境描述:

       使用一台空白的阿里云服务器2核4G。

服务器基本安装配置-docker容器化

关闭防火墙

systemctl stop firewalld

安装流程按照我之前写的文章来进行,我这里直接附上文章链接

阿丹的服务配置文章专题

安装docker

配置Linux服务器华为云耀云服务器之docker安装,以及环境变量安装 java (虚拟机一样适用)_华为云安装docker-优快云博客

安装Mysql5:7 

配置Linux服务器华为云耀云服务器之docker中Mysql5.7、redis安装 (虚拟机一样适用)_云耀云服务器开放3306-优快云博客

 安装普罗米修斯并监控mysql

Prometheus安装挂载数据卷

Prometheus技术文档--基本安装-docker安装并挂载数据卷-《十分钟搭建》_一单成的博客-优快云博客

 访问ip+9090出现以下页面完成安装

Grafana安装挂载数据卷

Grafana技术文档--基本安装-docker安装并挂载数据卷-《十分钟搭建》-附带监控服务器_一单成的博客-优快云博客

 访问ip+3000,出现页面完成Grafana安装

 在这一步的时候使用Grafana,在上面搜索框直接搜索Data sources将普罗米修斯设置为数据源,因为上面链接中有这里就不过多的说了。

docker中拉取mysql的探针

docker pull prom/mysqld-exporter

运行探针

首先创建一个专门用来监控的用户并授权

进入docker的mysql容器

docker exec -it 容器的id bash

 登录root用户

mysql -u root -p

输入密码后执行下面的指令 

CREATE USER 'mysql_monitor'@'%' IDENTIFIED BY 'adn666' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysql_monitor'@'%';
FLUSH PRIVILEGES;
EXIT

 这段SQL语句用于在MySQL数据库中创建一个名为'mysql_monitor'的用户,并给予该用户一些权限。让我逐行解释一下:

  1. CREATE USER 'mysql_monitor'@'%' IDENTIFIED BY 'adn666' WITH MAX_USER_CONNECTIONS 3;

    • 这行代码创建一个名为'mysql_monitor'的用户,并且定义了用户的身份验证方式(密码)为'adn666'。
    • 'localhost'指定了该用户只能从本地主机连接到MySQL服务器。
    • WITH MAX_USER_CONNECTIONS 3限制了该用户可以同时建立的最大连接数为3个。
  2. GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysql_monitor'@'localhost';

    • 这行代码将一些权限授予'mysql_monitor'用户。
    • PROCESS权限允许该用户查看当前正在运行的MySQL进程。
    • REPLICATION CLIENT权限允许该用户连接到MySQL复制服务器以获取复制相关的信息。
    • SELECT权限允许该用户在所有的数据库和表上执行SELECT查询语句。
  3. FLUSH PRIVILEGES;

    • 这行代码用于刷新MySQL权限表,以使新的用户和权限设置生效。
  4. EXIT

    • 这行代码用于退出MySQL命令行终端。

这些语句的目的是创建一个具有特定权限的MySQL用户,并确保这些权限生效。你可以根据自己的需求修改用户名、密码和授权的权限。

使用我们创建好的用户来启动探针

docker直接运行探针(出现问题)

GitHub - percona/mysqld_exporter: Exporter for MySQL server metrics

 下面的这个就是官网提供的但是阿丹运行报错

docker network create my-mysql-network
docker pull prom/mysqld-exporter

docker run -d \
  -p 9104:9104 \
  --network my-mysql-network  \
  -e DATA_SOURCE_NAME="user:password@(hostname:3306)/" \
  prom/mysqld-exporter

 根据实践总是出现有这个.my.cnf的配置文件找不到。在这里留个坑希望有大神可以解答一下。

使用从官网上下拉代码

 wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/mysqld_exporter-0.12.1.linux-amd64.tar.gz

解压

tar xf mysqld_exporter-0.12.1.linux-amd64.tar.gz -C /usr/local/

移动

ln -sv /usr/local/mysqld_exporter-0.12.1.linux-amd64/ /usr/local/prometheus_mysqld

编写配置文件,根据刚才我们新建的用户来完成配置

#编辑配置文件
vim /usr/local/prometheus_mysqld/.my.cnf 

#配置文件中内容
[client]
user=mysql_monitor #刚才新建的用户
password=adn666 #密码
port=3306 #端口号,如果不写ip地址(host)的话默认就是本机

配置systemd启动mysqld_exporter

vim /lib/systemd/system/mysqld_exporter.service

 下面为配置文件

[Unit]
Description=Mysqld_exporter
After=network.target
[Service]
ExecStart=/usr/local/prometheus_mysqld/mysqld_exporter --config.my-cnf=/usr/local/prometheus_mysqld/.my.cnf
[Install]
WantedBy=multi-user.target

 加入并启动,系统

systemctl daemon-reload
systemctl start mysqld_exporter
systemctl enable mysqld_exporter

 检查是否正常运行

ss -lnpt|grep 9104

 出现如下项目没有问题

使用ip地址+9104出现以下页面

 确认监控指标正常

curl http://localhost:9104/metrics|grep mysql_up

 那么我们下面就是在我们普罗米修斯中配置这个任务

在普罗米修斯中配置文件

修改这个配置 

  - job_name: 'mysql_db'
    static_configs:
      - targets: ['mysqlIP:9104']
        labels:
          group: mysql_db

 修改配置之后重启普罗米修斯的docker容器

访问ip+9090//targets查看

出现如上页面就是可以了! 

开始配置Grafana的主题-使用导入json的形式

阿丹:

        我这里准备了一个别人整理好的,我这里就直接拿过来使用了。

这个json文件我放在本文章的资源中了。直接拿取就可以,然后我们就使用上就可以了跟着我的步骤来。

注意:

        有两个方式来发现,一种是图表的形式来使用的,另外一种是使用配置预警规则来警告的。这里我们使用是监控图表的方式。(第二种方式阿丹后期会更新的)

我们可以直接在上面搜索这里直接搜索import

 直接将本文章中的json文件拖入就可以了,(前提是在安装的时候已经将数据来源设置为了我们安装好的普罗米修斯)

这里就是配置好了出现的面板

其中我们要使用到的就是这里!! 

<think>好的,用户现在问的是“使用监控普罗米修斯如何使用”,也就是想了解如何正确使用Prometheus进行监控。我需要先回顾之前的对话历史,看看之前讨论过什么。之前用户询问的是DataOS和HDFS联合使用的要点,我给出了详细的配置和优化建议。现在的问题转向Prometheus,可能需要同样结构化的回答。 首先,用户可能是系统管理员、开发人员或DevOps工程师,负责搭建监控系统。他们的需求是了解Prometheus的基本使用步骤,可能包括安装配置、数据采集、查询、告警和可视化等方面。用户可能已经有基本的监控需求,但需要具体指导如何实施。 我需要分解Prometheus的核心使用流程,确保涵盖关键要点。用户可能对Prometheus的架构不太熟悉,所以需要先简单介绍其组成,比如Prometheus Server、Exporter、Alertmanager等。然后分步骤讲解安装配置监控目标、使用Exporter、PromQL查询、告警规则设置、与Grafana集成,以及维护和优化。 要注意用户可能的误区,比如如何避免配置错误,或者如何处理数据存储问题。需要给出具体的配置示例,比如prometheus.yml的写法,以及Exporter的使用方法,如Node Exporter和自定义应用的指标暴露。此外,用户可能对PromQL不熟悉,需要提供常用查询示例,帮助他们快速上手。 还要考虑用户的实际应用场景,比如监控服务器、Kubernetes集群或微服务架构,可能需要不同的配置方法。同时,高级功能如远程存储、联邦集群可能对进阶用户有用,但基础使用可能不需要深入这部分,不过可以简要提及。 需要确保回答结构清晰,步骤明确,每个部分都有示例和最佳实践。同时,避免使用过于技术化的术语,保持解释的易懂性。最后,总结典型应用场景,帮助用户理解Prometheus的适用性,以及配置建议,如数据保留策略和性能优化。</think>以下是**Prometheus 监控系统**的核心使用流程与要点,涵盖数据采集、配置、告警及可视化等关键环节: --- ### **1. Prometheus 核心架构** - **组件角色** - **Prometheus Server**:主服务,负责拉取(Pull)指标、存储时序数据、执行查询和触发告警。 - **Exporter**:数据采集代理(如Node Exporter、MySQL Exporter),将目标系统的指标暴露为Prometheus格式。 - **Pushgateway**:临时缓存短生命周期任务(如批处理作业)的指标,供Prometheus拉取。 - **Alertmanager**:处理告警通知(邮件、Slack、Webhook等),支持去重、分组和静默。 - **Grafana**:可视化仪表盘工具,与Prometheus无缝集成。 --- ### **2. 部署与基础配置** #### **安装Prometheus Server** ```bash # 使用Docker快速启动 docker run -d --name=prometheus \ -p 9090:9090 \ -v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \ prom/prometheus ``` #### **配置监控目标(prometheus.yml)** ```yaml global: scrape_interval: 15s # 拉取间隔 evaluation_interval: 15s # 规则评估间隔 scrape_configs: - job_name: "node" # 监控节点资源 static_configs: - targets: ["192.168.1.10:9100", "192.168.1.11:9100"] # Node Exporter地址 - job_name: "mysql" static_configs: - targets: ["192.168.1.20:9104"] # MySQL Exporter地址 ``` --- ### **3. 数据采集与指标暴露** #### **使用Exporter采集数据** - **Node Exporter**(监控服务器资源): ```bash docker run -d --name=node_exporter -p 9100:9100 prom/node-exporter ``` 访问 `http://localhost:9100/metrics` 查看原始指标(如 `node_cpu_seconds_total`)。 - **自定义应用指标**(通过Client Library): 在代码中嵌入Prometheus客户端(如Python的`prometheus-client`),暴露HTTP端点: ```python from prometheus_client import start_http_server, Counter REQUEST_COUNT = Counter('app_requests_total', 'Total HTTP requests') @app.route('/') def home(): REQUEST_COUNT.inc() return "Hello" start_http_server(8000) # 暴露指标在 http://localhost:8000/metrics ``` --- ### **4. 数据查询(PromQL)** - **常用查询示例** ```promql # CPU使用率(按实例分组) 100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) # 内存使用量(单位GB) node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes / 1024^3 # HTTP请求QPS(按状态码统计) sum(rate(http_requests_total[5m])) by (status_code) # 磁盘空间不足预测(未来24小时) predict_linear(node_filesystem_free_bytes{mountpoint="/"}[1h], 3600*24) < 0 ``` - **查询工具** - **Prometheus Web UI**:访问 `http://localhost:9090/graph` 执行即时查询或范围查询。 - **Grafana**:将PromQL嵌入仪表盘面板,支持动态变量和模板。 --- ### **5. 告警规则配置** #### **定义告警规则文件(alerts.yml)** ```yaml groups: - name: host-monitor rules: - alert: HighCPUUsage expr: 100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80 for: 5m # 持续5分钟触发告警 labels: severity: critical annotations: summary: "CPU使用率过高 (实例: {{ $labels.instance }})" description: "CPU使用率持续超过80%,当前值: {{ $value }}%" - alert: DiskWillFill expr: predict_linear(node_filesystem_free_bytes{mountpoint="/"}[1h], 3600*24) < 0 labels: severity: warning annotations: summary: "磁盘将在24小时内耗尽 (实例: {{ $labels.instance }})" ``` #### **配置Alertmanager(alertmanager.yml)** ```yaml route: group_by: [alertname, cluster] receiver: 'slack-notifications' routes: - match: { severity: "critical" } receiver: 'sms-critical' receivers: - name: 'slack-notifications' slack_configs: - api_url: 'https://hooks.slack.com/services/XXXX' channel: '#alerts' - name: 'sms-critical' webhook_configs: - url: 'http://sms-gateway/api/send' ``` --- ### **6. 可视化与仪表盘** #### **Grafana集成** 1. **添加Prometheus数据源** - URL: `http://prometheus-server:9090` - Auth: 根据需求配置Basic Auth或TLS。 2. **导入预置仪表盘** - 使用ID `1860` 导入Node Exporter全资源监控仪表盘。 - 自定义面板:选择Prometheus数据源,输入PromQL表达式。 --- ### **7. 高级功能** - **联邦集群(Federation)** 跨多个Prometheus实例聚合数据: ```yaml scrape_configs: - job_name: 'federate' honor_labels: true metrics_path: '/federate' params: 'match[]': ['{job="prometheus"}'] static_configs: - targets: ['other-prometheus:9090'] ``` - **长期存储** 集成远程存储(如Thanos、VictoriaMetrics、InfluxDB)解决本地存储限制: ```yaml remote_write: - url: "http://thanos-receive:10908/api/v1/receive" remote_read: - url: "http://thanos-query:10912/api/v1/read" ``` --- ### **典型应用场景** 1. **Kubernetes监控** 使用 `kube-state-metrics` 和 `cAdvisor` 暴露集群状态与容器指标。 2. **微服务观测** 通过服务网格(如Istio)集成Prometheus监控链路追踪指标(如延迟、错误率)。 3. **业务指标监控** 自定义暴露订单量、用户活跃度等业务指标,实现业务健康度分析。 --- ### **维护与优化建议** - **数据保留策略** 调整 `--storage.tsdb.retention.time=15d` 控制本地存储周期。 - **资源限制** 监控Prometheus自身资源(内存、磁盘),避免OOM或存储写满。 - **高可用部署** 运行多个Prometheus实例,通过负载均衡或分片(Sharding)提升可靠性。 --- 通过以上步骤,可快速搭建完整的Prometheus监控体系,覆盖从基础设施到应用层的全栈观测能力。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值