教你如何在10分钟内用Prometheus和Grafana监控你的Django应用

栏目: IT技术 · 发布时间: 4年前

内容简介:在这篇10分钟的教程里,。。。图1

在这篇10分钟的教程里, 我将教你如何用Prometheus和Grafana监控一个Django应用 。你将获得如下的 监控面板

。。。图1

Prometheus 是一个监控解决方案 ,它能从目标端那边收集 监控数据(metrics) 。Prometheus是一个 开源项目 ,最初从SoundCloud公司内部发起,这所公司是由几个前Google工程师所创建。Prometheus的初衷是为了能够监控高度动态的容器环境。自从2012年它问世以来,许多公司和组织就开始采纳它。

Grafana 是一个能够展示统计图像的Web ,它有着非常优秀的展示能力,并且图表、面板都可配置化。当你有了数据,你可以通过Grafana来展示统计,它支持非常多的数据来源,当然也支持来源自Prometheus的数据。

为什么我选择用Prometheus搭配Grafana来监控我的Django应用?

2个月前,我在我们生产环境里的web应用上加了一条新的安全规则。这条安全规则在测试环境中通过测试,并未引起任何问题。之后部署到生产环境里,刚开始也一切正常。但是直到几个小时过后,有一个用户反馈无法访问我们这个web,我们也发现正是由于这个新加的规则,一些API返回了“503 Server Unavailable”错误。

那时,我们还没有一个监控系统去监控我们的应用,生产上发生事故,直到有用户告诉我们,我们才知道。

像是在Google这样级别的大公司,每小时营收大约在1千5百万美元左右,你可以想象一下,产线上发生这种小事故,将会给公司带来多大的损失!

Prometheus是如何工作的?

作为监控服务,Prometheus监控每一项具体的事,可以是整个 Linux 服务器,可以是单独的一个Apache服务器,可以单单是一个进程,一个数据库,亦或是其他任何你想监控的系统单元。

在Prometheus世界里,有两件事要明确,一是Prometheus服务本身,二是监控目标。

。。。图2

为了能够使用Prometheus监控你的服务,你的服务需要 通过endpoint暴露给Prometheus ,暴露的endpoint里,会有一组监控数据名字和其当前的值。

为了方便用户设置endpoint和暴露监控数据,Prometheus还提供了了 一组客户端库

Prometheus官方支持的客户端库有这4种语言: Go,Java/Scala,Python和Ruby

Prometheus本身提供一个简单的UI界面,你可以通过Prometheus支持的查询语言PromQL,亲自手写一个,去查询你想要的监控数据。

在这里,我们使用上面提及的 Grafana ,Grafana是来自第三方的组件,作为展现层, 将存储在Prometheus时序数据库里的数据可视化

你不需要编写PromQL查询语句,直接与Prometheus打交道,你可以使用Grafana UI面板,从Prometheus服务器那边查询到监控数据,并且把它们在Grafana上展现出来。我们马上动手试一试。

现在,我们开始吧。

第1步: 把你的Prometheus和Grafana跑起来

在此之前,你需要先安装 Docker 。在这个教程里,我会使用 Docker 镜像,但是你也可以用其他方式。

Docker容器镜像是一种轻量、独立、可执行的软件打包方式,它将所需要的一切:代码,运行时,系统工具,系统库和设置,都打包在一起。想要活得更多关于Docker的信息,你可以点击连接: https://docs.docker.com/engine/docker-overview/

最简单的方式去运行一个Prometheus服务就是用Prometheus的Docker镜像。

这个镜像,由Prometheus社区维护: https://hub.docker.com/r/prom/prometheus/ ,你可以直接从docker hub上拉取这个镜像

为了能够让Grafana跑起来,你可以用下面的这个镜像: grafana/grafana:6.5.2

接下来,你得写一个docker-compose文件来包含对这两个镜像的配置

docker-compose.monitoring.yml

version: ‘3.6’

services:

prometheus:

 image: prom/prometheus:v2.14.0

 volumes:

 — ./prometheus/:/etc/prometheus/

 command:

 — ‘ — config.file=/etc/prometheus/prometheus.yml’

 ports:

 — 9090:9090

grafana:

 image: grafana/grafana:6.5.2

 ports:

 — 3060:3000

第2步:配置你的Prometheus

为了能够让Prometheus跑起来,你需要创建一份prometheus.yml文件。

我把这个文件放在了./prometheus/目录下,同时这个目录里也放了刚刚创建的docker-compose.monitoring.yml文件

prometheus.yml

global:

 scrape_interval: 15s

 evaluation_interval: 15s

rule_files:

 # — “first.rules”

 # — “second.rules”

scrape_configs:

 — job_name: monitoring

 static_configs:

 — targets:

    — host.docker.internal

host.docker.internal 用来获取目标监控对象的IP地址。你可以从这里找到更多的信息: https://docs.docker.com/docker ... rking

这里的url是仅用作开发目的。如果你面对的是在生产环境中部署好的应用,那么在生产环境中,你也应该拥有一个prometheus服务器。并且你需要修改相应配置文件prometheus.yml,将这个 host.docker.internal 改成生产环境中目标机器的域名地址,比如 your-prod-application.com

为了能够让Prometheus和Grafana跑起来,你需要在你的命令行终端,敲上这个命令:

$ docker-compose -f docker-compose.monitoring.yml up -d

那么你将在浏览器里输入localhost:9090后,看到下面的东西

。。。。图片4

此时此刻,endpoint/metrics还不存在,这也是为什么目标返回404错误。我们将在下一步看到,如何在我们的Django里,创建一个endpoint/metrics

第3步: 添点东西,暴露你Django应用的监控数据

Prometheus社区已经为许多技术栈(Nodejs,Spring-Boot,Django等等。。)准备好了许多的开源的第三方库,你可以直接拿来使用。

其中之一就有 Django-prometheus ,它可以将Django的监控数据暴露给Prometheus。

在你的django项目里安装django-prometheus:

pip install django-prometheus

在你的配置项里,增加下面内容:

settings.py

BASE_INSTALLED_APPS = [

 ...

 “django_prometheus”,

]

MIDDLEWARE = [

 “django_prometheus.middleware.PrometheusBeforeMiddleware”,

...

 “django_prometheus.middleware.PrometheusAfterMiddleware”,

]

那么暴露给Prometheus的endpoints设置完成,这个url地址会是localhost/metrics。

urls.py

url(“”, include(“django_prometheus.urls”)),

现在你可以到,你的prometheus targets对象会是"UP"状态: http://localhost:9090/targets

。。。图5

第4步:创建你的Grafana面板

现在你已经有了一个活着的Prometheus targets对象,你可以用Grafana创建让人兴奋的监控面板。

输入 http://localhost:3060 ,你可以看到Grafana。

添加你的Prometheus实例作为一个数据源(如下GIF动图显示)

请点击左边的Configuration配置项,然后点击Data Sources数据源,然后点击添加一个数据源,然后输入名字,输入你数据源的url地址。

。。。。图6

一旦上面的完成,你就可以创建一个新的监控面板:

  1. 点击graph title,然后点击“Edit”
  2. 在“Metrics”tab页,选择你的Prometheus数据源(页面右下角)
  3. 在“Query”一栏,输入任何的Prometheus查询表达式,并且使用“Metric”选项去完成补全

可以的话,你可以用一些label标签去完成进一步的过滤

。。。。图7

Grafana社区非常的活跃,提供了非常多的dashboards面板供你下载,其中许多就是基于Prometheus数据源。如果你的被监控组件是常见的那种,那么你可以非常快的搭建起来。

结论

你可以看到, 只要把Grafana的数据源设定为Prometheus,Grafana就能使得开发者在Grafana里添加上他们想要的统计数据,获得对他们而言有价值的数据 :比如http响应码,每页的延迟,程序部署次数等。。。

为了做到这些,你还得使用第三方的库来设置一个endpoint,用来暴露你想要的统计数据。配置文件prometheus.yml是为了告诉你的Prometheus实例,endpoint在哪里,如何连接。

这部分做完后,把Prometheus实例的url地址告诉给Grafana,以完成数据源的添加。

现在一切都已设置完成,你应该有了Prometheus和Grafana,它们正在监控你的Django应用。

后续

你已经注意到,我们已经在本地把我们的Grafana和Prometheus跑起来了。一旦你做到这点,你也准备好用你自己的方式去 部署你的Grafana和Prometheus docker镜像

我希望这10分钟的教程可以帮到你,让你方便、快速地使用Prometheus和Grafana去监控一个Django应用。这边有一些资源,你可看看:


以上所述就是小编给大家介绍的《教你如何在10分钟内用Prometheus和Grafana监控你的Django应用》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

分布式算法导论

分布式算法导论

特尔 (Gerard Tel) / 电子工业出版社 / 2003-7 / 59.00

《分布式算法导论(第2版)(英文版)》由电子工业出版社出版。一起来看看 《分布式算法导论》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具