Docker下Prometheus和Grafana三部曲之二:细说Docker编排

rule_files:

- “first_rules.yml”

- “second_rules.yml”

A scrape configuration containing exactly one endpoint to scrape:

Here it’s Prometheus itself.

scrape_configs:

The job name is added as a label job=<job_name> to any timeseries scraped from this config.

  • job_name: ‘prometheus’

metrics_path defaults to ‘/metrics’

scheme defaul

必看视频!获取2024年最新Java开发全套学习资料 备注Java

ts to ‘http’.

static_configs:

  • targets: [‘127.0.0.1:9090’,‘node-exporterhost:9100’,‘cadvisorhost:8080’]

  • job_name: ‘proemtheusdemo’

metrics_path defaults to ‘/metrics’

scheme defaults to ‘http’.

metrics_path: ‘/prometheus’

static_configs:

  • targets: [‘prometheusdemohost:8080’]

这是个普通的prometheus配置文件,除了监控自身的9090端口,还有node-exporterhost、cadvisorhost、prometheusdemohost这三个host的不同端口,分别对应着宿主机自身、docker服务、业务web服务等三个监控数据源;

  1. 看了上面的配置,您可能会疑惑:node-exporterhost、cadvisorhost、prometheusdemohost它们代表什么呢?配置项的那个位置应该填写具体的IP地址才对。

其实,这个prometheus.yml文件是给Docker容器中的prometheus服务使用的,而node-exporter、cadvisor、业务web服务也分别运行在各自的Docker容器中,prometheus服务想要访问这些容器,最好的方法就是link参数,因此node-exporterhost、cadvisorhost、prometheusdemohost都是给prometheus容器配置的link参数,这就相当于docker给prometheus容器的/etc/hosts文件写入了上述三个容器的ip,对应的name就是node-exporterhost、cadvisorhost、prometheusdemohost,稍后在docker-compose.yml文件中可以看到;

容器编排文件docker-compose.yml

docker-compose.yml里面记录了所有的容器的设置和依赖关系:

version: ‘2’

services:

node-exporter:

image: prom/node-exporter:v0.17.0-rc.0

container_name: node-exporter

restart: unless-stopped

ports:

  • ‘9100:9100’

command:

  • ‘–path.procfs=/host/proc’

  • ‘–path.sysfs=/host/sys’

  • ‘–collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)’

  • ‘–collector.textfile.directory=/node_exporter/prom’

volumes:

  • /proc:/host/proc

  • /sys:/host/sys

  • /:/rootfs

  • ./etc/node_exporter/prom:/node_exporter/prom

cadvisor:

image: google/cadvisor:v0.28.0

container_name: cadvisor

depends_on:

  • node-exporter

volumes:

  • /:/rootfs:ro

  • /var/run:/var/run:rw

  • /sys:/sys:ro

  • /var/lib/docker/:/var/lib/docker:ro

ports:

  • “8080:8080”

restart: unless-stopped

prometheusdemo:

image: bolingcavalry/prometheusdemo:0.0.1-SNAPSHOT

container_name: prometheusdemo

ports:

  • “8081:8080”

restart: unless-stopped

prometheus:

image: prom/prometheus:v2.8.0-rc.0

container_name: prometheus

depends_on:

  • node-exporter

links:

  • node-exporter:node-exporterhost

  • cadvisor:cadvisorhost

  • prometheusdemo:prometheusdemohost

volumes:

  • ./prometheus.yml:/etc/prometheus/prometheus.yml

ports:

  • “9090:9090”

restart: unless-stopped

grafana:

image: grafana/grafana:5.4.2

container_name: grafana

links:

  • prometheus

environment:

  • GF_SERVER_ROOT_URL=http://grafana.server.name

  • GF_SECURITY_ADMIN_PASSWORD=secret

  • GF_USERS_ALLOW_SIGN_UP=false

depends_on:

  • prometheus

ports:

  • “3000:3000”

restart: unless-stopped

关于docker-compose.yml文件,有以下几点需要注意:

a. 为了采集到宿主机的数据,node-exporter、cadvisor这两个容器通过数据卷参数将宿主机的目录映射到容器中,这在生产环境是要严格控制的,不要将重要的目录轻易暴露给未经校验的容器,例如一个恶意的镜像被pull到本地,然后通过docker tag命令把名称改成了node-exporter、cadvisor;

b. prometheus容器的配置中使用了link参数,这样就能用node-exporterhost这样的名称直接访问到node-export容器了;

c. prometheus容器通过数据卷映射参数,将宿主机的prometheus.yml映射到容器中,这样我们只要配置好当前目录下的prometheus.yml文件,就可以直接在prometheus容器生效了(如果容器已经启动后再次修改了此文件,要使用docker restart prometheus命令重启容器才能生效);

d. prometheusdemo是基于springboot开发的一个web服务,对外提供一个接口,通过ports参数将容器的8080和宿主机的8081端口映射;

e. grafana容器的环境变量GF_SECURITY_ADMIN_PASSWORD=secret,表示Grafana的web网页用admin账号登录时,密码是secret;

看过了docker-compose.yml文件,您对整个环境的容器信息已经清楚了,接下来看看import_dashboard.sh这个脚本做了什么;

通过import_dashboard.sh脚本在Grafana创建数据源和监控项

import_dashboard.sh的内容如下,其实就是用curl命令向Grafana服务器发送http请求,关键位置已加了中文注释,就不多赘述了:

#!/bin/bash

#第一个参数作为Grafana服务器的IP地址

GRAFANA_HOST=$1

#第二个参数作为身份鉴权的API Key

API_KEY=$2

echo “grafana host [”${GRAFANA_HOST}“]”

echo “api key [”${API_KEY}“]”

echo “start create datasource”

#通过curl工具发起一个POST请求,用来创建数据源

curl -X POST \

http://${GRAFANA_HOST}:3000/api/datasources \

-H “Content-Type:application/json” \

-H “Authorization: Bearer ${API_KEY}” \

-d ‘{“name”:“Prometheus”,“type”:“prometheus”,“url”:“http://prometheus:9090”,“access”:“proxy”,“basicAuth”:false}’ \

echo “”

echo “start create host dashboard”

#通过curl工具发起一个POST请求,用来创建一个dashboard,也就是前文中我们看到的反映宿主机CPU、磁盘等基本状况的监控页面

curl -X POST \

http://${GRAFANA_HOST}:3000/api/dashboards/db \

-H ‘Accept: application/json’ \

-H “Authorization: Bearer ${API_KEY}” \

-H ‘Content-Type: application/json’ \

-H ‘Postman-Token: 2d3c3d60-4c5a-4936-836f-1572d447f473’ \

-H ‘cache-control: no-cache’ \

-d '{

“dashboard”: {

“annotations”: {

“list”: [

{

“builtIn”: 1,

“datasource”: “-- Grafana --”,

“enable”: true,

“hide”: true,

面试题总结

其它面试题(springboot、mybatis、并发、java中高级面试总结等)

d": {

“annotations”: {

“list”: [

{

“builtIn”: 1,

“datasource”: “-- Grafana --”,

“enable”: true,

“hide”: true,

面试题总结

其它面试题(springboot、mybatis、并发、java中高级面试总结等)

[外链图片转存中…(img-rNX8fzhg-1716407586524)]

[外链图片转存中…(img-MMaTGytZ-1716407586524)]

[外链图片转存中…(img-379RghWy-1716407586524)]

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Docker部署PrometheusGrafana的步骤: 1. 安装DockerDocker Compose 如果你还没有安装DockerDocker Compose,可以参考官方文档进行安装。 2. 创建Docker Compose文件 在本地创建一个文件夹(例如:`prometheus-grafana`),并在其中创建一个`docker-compose.yml`文件,用于定义PrometheusGrafana服务。 在文件中,添加以下内容: ``` version: '3' services: prometheus: image: prom/prometheus container_name: prometheus ports: - "9090:9090" volumes: - ./prometheus:/etc/prometheus command: - --config.file=/etc/prometheus/prometheus.yml restart: always grafana: image: grafana/grafana container_name: grafana ports: - "3000:3000" volumes: - ./grafana:/var/lib/grafana restart: always ``` 这个文件定义了两个服务:`prometheus`和`grafana`。`prometheus`服务将使用`prom/prometheus`镜像,并将本地`./prometheus`目录挂载到容器中`/etc/prometheus`目录,`grafana`服务将使用`grafana/grafana`镜像,并将本地`./grafana`目录挂载到容器中`/var/lib/grafana`目录。 3. 创建Prometheus配置文件 在本地创建`prometheus`文件夹,在其中创建一个`prometheus.yml`文件,用于定义Prometheus监控的目标和规则。 在文件中,添加以下内容: ``` global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] ``` 这个文件定义了一个`prometheus`作业,将使用Prometheus默认的`localhost:9090`目标进行监控。 4. 运行Docker Compose 在终端中,进入`prometheus-grafana`目录,并运行以下命令: ``` docker-compose up -d ``` 这将启动PrometheusGrafana服务,并将它们置于后台运行。你可以使用以下命令检查服务是否正在运行: ``` docker-compose ps ``` 5. 访问Grafana 在浏览器中,访问`http://localhost:3000`,使用默认的用户名和密码(admin/admin)登录Grafana。 现在,你可以在Grafana中添加一个数据源,选择Prometheus,并将URL设置为`http://prometheus:9090`(因为Prometheus服务的名称是`prometheus`,而不是`localhost`)。 完成后,你可以创建一个新的仪表板并添加一个面板,从而开始使用Grafana可视化Prometheus监控数据。 以上就是使用Docker部署PrometheusGrafana的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值