Prometheus

Prometheus普罗米修斯,是一项SoundCloud开源的监控和报警解决方案,能够实现与当下最流行的Kubernetes无缝连接,使得普罗米修斯逐渐成为主流监控方案
在这里插入图片描述
homebrew安装prometheus:

$ brew install prometheus

编写配置文件 prometheus.yml :

global:
  scrape_interval:     15s # By default, scrape targets every 15 seconds.

  # Attach these labels to any time series or alerts when communicating with
  # external systems (federation, remote storage, Alertmanager).
  external_labels:
    monitor: 'codelab-monitor'

# 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'

    # Override the global default and scrape targets from this job every 5 seconds.
    scrape_interval: 5s

    static_configs:
      - targets: ['localhost:9090']

指定配置文件,运行 prometheus :

$ prometheus --config.file=prometheus.yml

打开localhost:9090就可以看到prometheus的监控页面了:
在这里插入图片描述
可以展示的数据从metrics中来,所以你可以打开localhost:9090/metrics查看都有哪些指标可以显示。
界面太难看了有木有,所以我们需要Grafana~

Grafana

Grafana是一款美观强大的开源监控指标可视化展示框架,操作简单,视觉酷炫!
homebrew安装Grafana:

$ brew install grafana

启动:

$ brew services start grafana

启动后,打开localhost:3000就可以看到Grafana界面了。首先是一个登录页面,默认用户名和密码都是admin。登录,修改用户名密码blablabla…
添加数据源,顾名思义,需要展示的数据从哪里来,Prometheus啊,加上这个数据源,如下图
在这里插入图片描述
后续操作就更简单了,Add panel添加新的仪表盘监控,Add Query写入Prometheus的SQL,数据就展示出来了。
其他的功能,比如添加文件夹分组啊、改panel title啊、import JSON file啊之类的多点一点就会了
import JSON file功能不错,在Grafana中你的数据展示设置和配置是以JSON文件的格式保存的,import JSON file可以支持上传和下载JSON文件,Grafana官网有很丰富的Dashboards供你选择,免去了自己一步一步把监控都建出来的烦恼。搜索到想要的Dashboard后,输入id号就OK了,如下图
在这里插入图片描述

Docker

以上操作都是在本地进行的,在应用到kubernetes之前,我们先操作一下本地Docker运行的方法做个过渡。这里使用官方deom举例,即使用Prometheus + cAdvisor + Grafana监控Redis服务
cAdvisor(container Advisor简称)是分析和运行容器暴露的资源使用情况和性能数据的工具,能够直接使用Prometheus metrics。
1、编写 prometheus.yml 文件,使Prometheus能够由cAdvisor刷新metrics:

scrape_configs:
- job_name: cadvisor
  scrape_interval: 5s
  static_configs:
  - targets:
    - cadvisor:8080

2、编写 docker-compose.yml 制作Docker组件以运行这三个容器:

version: '3.2'
services:
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    ports:
    - 9090:9090
    command:
    - --config.file=/etc/prometheus/prometheus.yml
    volumes:
    - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
    depends_on:
    - cadvisor
  cadvisor:
    image: google/cadvisor:latest
    container_name: cadvisor
    ports:
    - 8080:8080
    volumes:
    - /:/rootfs:ro
    - /var/run:/var/run:rw
    - /sys:/sys:ro
    - /var/lib/docker/:/var/lib/docker:ro
    depends_on:
    - redis
  redis:
    image: redis:latest
    container_name: redis
    ports:
    - 6379:6379

运行容器:

$ docker-compose up

如官方文档所述,成功运行三个容器后,你会看到最后一行会打印出如下内容:

prometheus  | level=info ts=2018-07-12T22:02:40.5195272Z caller=main.go:500 msg="Server is ready to receive web requests."

另启终端运行docker-compose ps,有类似如下输出:

   Name                 Command               State           Ports
----------------------------------------------------------------------------
cadvisor     /usr/bin/cadvisor -logtostderr   Up      8080/tcp
prometheus   /bin/prometheus --config.f ...   Up      0.0.0.0:9090->9090/tcp
redis        docker-entrypoint.sh redis ...   Up      0.0.0.0:6379->6379/tcp

同样是在本地打开Grafana就可以展示数据,后面就不再赘述了

kubernetes

这个没有实践条件,简单来说就是把三个镜像部署到 k8s 上,通过暴露端口,本地 Grafana 监听 k8s 上的 Prometheus ,获取 metrics。由于是内部资源,没有权限,cAdvisor 获取pod资源信息失败,毕竟不是运维,也不去深究了,好在公司k8s集群已经集成了 Prometheus 和 Grafana,所以只需要在自己的服务上使用 Prometheus_Client 项目,在服务代码内,添加一些自定义 metrics ,然后在 prometheus.yml 中给到 Prometheus 的 target 就可以使用了,再在 server.yml 文件中使用 annotations 给 kubernetes 提供一个 Prometheus 的发现,就OK了。

annotations:
  prometheus.io/scrape: "true"

Prometheus_Client 项目 README.md 写的很详细,功能也比较简单,不再赘述了。

Logo

开源、云原生的融合云平台

更多推荐