安装
[!NOTE]
首先安装docker/docker-compose:
1 2 3 4 5 6 7
| apt -y update apt -y install curl curl -sSL https://get.docker.com/ | sh systemctl start docker systemctl enable docker curl -L https://github.com/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
|
1)使用docker-compose安装Prometheus和Grafana服务
docker-compose.yml内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| version: '3.5' volumes: prometheus-data: grafana-data:
services: prometheus: image: prom/prometheus container_name: prometheus volumes: - prometheus-data:/prometheus - ./prometheus.yml:/etc/prometheus/prometheus.yml command: - '--config.file=/etc/prometheus/prometheus.yml' - '--web.enable-admin-api' - '--web.enable-lifecycle' - '--storage.tsdb.retention.time=200h'
logging: options: max-size: 10m networks: - localnet
grafana: image: grafana/grafana container_name: grafana networks: - localnet volumes: - grafana-data:/var/lib/grafana logging: options: max-size: 10m
networks: localnet: external: true
|
因为nginx服务后端接入的服务不止prometheus
,所以将nginx的docker服务拆到其他docker-compose文件中。网络共用localnet
,这样nginx就可以通过容器名称直接访问prometheus服务。
创建本地docker网络,命令如下
1
| docker network create localnet
|
根据自己服务的情况,选择存储的retention配置,我这里是--storage.tsdb.retention.time=200h
,还可以配置--storage.tsdb.retention.size
添加prometheus.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| global: scrape_interval: 60s external_labels: monitor: 'self-hosted'
scrape_configs: - job_name: 'prometheus' static_configs: - targets: - 'localhost:9090' labels: instance: prometheus
- job_name: 'VPS监控' static_configs: - targets: - '需要监控的vps的IP:19898' labels: instance: 'vps1' - targets: - '需要监控的vps的IP:19898' labels: instance: 'vps2'
|
此时docker-compose up -d
启动服务跑起来就好了。
2)配置nginx反向代理
docker-compose.yml文件如下,使用cloudflare的证书最多可以15年,letsencrypt每3个月需要更新一次。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| version: "3.5" networks: localnet: external: true
services: nginx: image: nginx:1.19.10 environment: TZ: Asia/Shanghai restart: always container_name: nginx volumes: - ./data/nginx:/etc/nginx/conf.d - ./data/cfcert:/etc/cfcert ports: - 80:80 - 443:443 networks: - localnet logging: options: max-size: 10m
|
公网服务的反代配置-monitor.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| server { listen 80; server_name 你的域名;
location / { return 301 https://$host$request_uri; } } upstream grafana-server{ server grafana:3000; } server { listen 443 ssl;
server_name 你的域名; ssl_certificate /etc/cfcert/你的域名.pem; ssl_certificate_key /etc/cfcert/你的域名.key; if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot") { return 403; } location / { proxy_pass http://grafana-server; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; } }
|
docker-compose up -d
启动nginx服务,就可以通过你的域名访问grafana面板了。
3)在需要监控的vps节点上安装node_exporter
1 2 3
| wget https://github.com/prometheus/node_exporter/releases/download/v1.1.2/node_exporter-1.1.2.linux-amd64.tar.gz
tar -zxvf node_exporter-1.1.2.linux-amd64.tar.gz
|
设置node_exporter为自启动服务
1 2 3
| cd node_exporter-1.1.2.linux-amd64/ cp node_exporter /usr/bin vi /etc/systemd/system/node_exporter.service
|
node_exporter.service内容如下,node exporter默认端口为9100,这里修改为19898:
1 2 3 4 5 6 7 8 9 10 11
| [Unit] Description=Node Exporter
[Service] User=root ExecStart=/usr/bin/node_exporter --web.listen-address=:19898
[Install] WantedBy=multi-user.target systemctl start node_exporter.service systemctl enable node_exporter.service
|
PS:如果使用oracle的free vps,需要通过iptable开放端口
1
| iptables -I INPUT -p tcp --dport 19898 -j ACCEPT
|
4)grafana面板配置
数据源直接选择Prometheus即可

注意URL使用的是Prometheus的容器名称

grafana官网可以找到大量的面板模板(https://grafana.com/grafana/dashboards?dataSource=prometheus),填入对应的dashboard id即可,如8919

至此配置完成。
最终面板的效果如下
