Prometheus : 入门
<p><span style="font-family: Microsoft YaHei; font-size: 15px">Prometheus 是一个开源的监控系统。支持灵活的查询语言(PromQL),采用 http 协议的 pull 模式拉取数据等特点使 Prometheus 即简单易懂又功能强大。</span></p><h1><span style="font-family: Microsoft YaHei; font-size: 18pt">Prometheus 的主要特点</span></h1>
<ul>
<li>
<p><span style="font-size: 15px; font-family: Microsoft YaHei">多维度数据模型</span></p>
</li>
<li>
<p><span style="font-family: Microsoft YaHei">灵活的查询语言</span></p>
</li>
<li>
<p><span style="font-family: Microsoft YaHei">不依赖分布式存储,单个服务器节点是自主的</span></p>
</li>
<li>
<p><span style="font-family: Microsoft YaHei">通过 pull 方式采集时序数据</span></p>
</li>
<li>
<p><span style="font-family: Microsoft YaHei">可以通过中间网关进行时序列数据推送</span></p>
</li>
<li>
<p><span style="font-family: Microsoft YaHei">通过服务发现或者静态配置来发现目标服务对象</span></p>
</li>
<li>
<p><span style="font-family: Microsoft YaHei">支持多种界面展示方案,比如 grafana 等</span></p>
</li>
</ul>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">Prometheus 由 server, client, push gateway, exporter, alertmanager 等核心组件构成。Prometheus server 主要用于抓取和存储数据。Client libraries 可以用来连接 server 并进行查询等操作。Push gateway 用于批量,短期的监控数据的汇总节点,主要用于业务数据汇报等。不同的 exporter 用于不同场景下的数据收集,如收集主机信息的 node_exporter,收集 MongoDB 信息的 MongoDB exporter 等等。下图是 Prometheus 官方提供的架构图:</span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px"><img src="http://images2017.cnblogs.com/blog/952033/201710/952033-20171008153709684-1656193383.png"></span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">从这个架构图,我们可以看出它的运行逻辑大概是这样的:</span><br><span style="font-family: Microsoft YaHei; font-size: 15px">Prometheus server 定期从数据源拉取数据,然后将数据持久化到磁盘。Prometheus 可以配置 rules,然后定时查询数据,当条件触发的时候,会将 alert 推送到配置的 Alertmanager。Alertmanager 收到警告的时候,可以根据配置,聚合,去重,降噪,最后发送警告。同时还可以使用 API, Prometheus Console 或者 Grafana 查询和聚合数据。</span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">本文将介绍在 ubuntu 16.04 系统中安装 Prometheus Server,并配置它从一台主机上拉取监控信息,然后通过 Prometheus Server 提供的简易 UI 查询数据。</span></p>
<h1><span style="font-family: Microsoft YaHei; font-size: 18pt">在 Ubuntu 16.04 中安装 Prometheus Server</span></h1>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">请从 Prometheus 官方下载 linux 版的二进制压缩包。注意在下载前要选择操作系统为 linux。</span><br><span style="font-family: Microsoft YaHei; font-size: 15px">执行下面的命令把 prometheus server 安装到 /usr/local/share/prometheus 目录:</span></p>
<div class="cnblogs_code">
<pre>$ <span style="color: rgba(0, 0, 255, 1)">tar</span> -xf prometheus-<span style="color: rgba(128, 0, 128, 1)">1.7</span>.<span style="color: rgba(128, 0, 128, 1)">2</span>.linux-amd64.<span style="color: rgba(0, 0, 255, 1)">tar</span><span style="color: rgba(0, 0, 0, 1)">.gz
$ </span><span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">mv</span> prometheus-<span style="color: rgba(128, 0, 128, 1)">1.7</span>.<span style="color: rgba(128, 0, 128, 1)">2</span>.linux-amd64 /usr/local/share/prometheus</pre>
</div>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">理论上来说这样就算是安装完成了,但是无论如何这都太简陋了。因为每次启动 Prometheus server 都需要手动执行命令:</span></p>
<div class="cnblogs_code">
<pre>$ /usr/local/share/prometheus/prometheus -config.<span style="color: rgba(0, 0, 255, 1)">file</span>=/usr/local/share/prometheus/prometheus.yml</pre>
</div>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">这实在是太不方便了!应该把它配置成服务,用 systemd 来管理。</span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">先创建一个名为 prometheus 的用户:</span></p>
<div class="cnblogs_code">
<pre>$ <span style="color: rgba(0, 0, 255, 1)">sudo</span> adduser prometheus</pre>
</div>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">把目录 /usr/local/share/prometheus/ 的所有者设置为 prometheus 用户:</span></p>
<div class="cnblogs_code">
<pre>$ <span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">chown</span> -R prometheus:prometheus /usr/local/share/prometheus/</pre>
</div>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">然后创建文件 /etc/systemd/system/prometheus.service,内容如下:</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">
Description</span>=<span style="color: rgba(0, 0, 0, 1)">Prometheus Server
Documentation</span>=https:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">prometheus.io/docs/introduction/overview/</span>
After=<span style="color: rgba(0, 0, 0, 1)">network.target
User</span>=<span style="color: rgba(0, 0, 0, 1)">prometheus
Restart</span>=on-<span style="color: rgba(0, 0, 0, 1)">failure
WorkingDirectory</span>=/usr/local/share/prometheus/<span style="color: rgba(0, 0, 0, 1)">
ExecStart</span>=/usr/local/share/prometheus/<span style="color: rgba(0, 0, 0, 1)">prometheus \
</span>-config.<span style="color: rgba(0, 0, 255, 1)">file</span>=/usr/local/share/prometheus/<span style="color: rgba(0, 0, 0, 1)">prometheus.yml
WantedBy</span>=multi-user.target</pre>
</div>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">好了,现在可以通过 systemd 来控制 Prometheus 服务了,先启动服务:</span></p>
<div class="cnblogs_code">
<pre>$ <span style="color: rgba(0, 0, 255, 1)">sudo</span> systemctl daemon-<span style="color: rgba(0, 0, 0, 1)">reload
$ </span><span style="color: rgba(0, 0, 255, 1)">sudo</span> systemctl start prometheus</pre>
</div>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">再把服务配置为开机时启动:</span></p>
<div class="cnblogs_code">
<pre>$ <span style="color: rgba(0, 0, 255, 1)">sudo</span> systemctl enable prometheus</pre>
</div>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">检查一下服务的状态:</span></p>
<div class="cnblogs_code">
<pre>$ <span style="color: rgba(0, 0, 255, 1)">sudo</span> systemctl status prometheus</pre>
</div>
<p><span style="font-family: Microsoft YaHei; font-size: 15px"><img src="http://images2017.cnblogs.com/blog/952033/201710/952033-20171008153954090-271077828.png"></span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">到此为止 Prometheus Server 已经开始运行了。接下来我们就可以收集数据了。</span></p>
<h1><span style="font-family: Microsoft YaHei; font-size: 18pt">使用 Node Exporter 收集主机信息</span></h1>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">数据收集的任务由不同的 exporter 来完成,如果要收集 linux 主机的信息,可以使用 node exporter。然后由 Prometheus Server 从 node exporter 上拉取信息。接下来我们介绍如何安装并配置 node exporter。</span><br><span style="font-family: Microsoft YaHei; font-size: 15px">请从 Prometheus 官方下载 node exporter 的二进制压缩包。执行下面的命令把 node exporter 安装到 /usr/local/share/ 目录:</span></p>
<div class="cnblogs_code">
<pre>$ <span style="color: rgba(0, 0, 255, 1)">tar</span> -xf node_exporter-<span style="color: rgba(128, 0, 128, 1)">0.14</span>.<span style="color: rgba(128, 0, 128, 1)">0</span>.linux-amd64.<span style="color: rgba(0, 0, 255, 1)">tar</span><span style="color: rgba(0, 0, 0, 1)">.gz
$ </span><span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">cp</span> node_exporter-<span style="color: rgba(128, 0, 128, 1)">0.14</span>.<span style="color: rgba(128, 0, 128, 1)">0</span>.linux-amd64/node_exporter /usr/local/sbin/</pre>
</div>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">同样的我们把 node exporter 也配置成通过 systemd 管理。创建文件 /etc/systemd/system/node-exporter.service,内容如下:</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">
Description</span>=<span style="color: rgba(0, 0, 0, 1)">Prometheus Node Exporter
After</span>=<span style="color: rgba(0, 0, 0, 1)">network.target
ExecStart</span>=/usr/local/sbin/<span style="color: rgba(0, 0, 0, 1)">node_exporter
User</span>=<span style="color: rgba(0, 0, 0, 1)">nobody
WantedBy</span>=multi-user.target</pre>
</div>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">执行下面的命令设置为开机启动并启动服务:</span></p>
<div class="cnblogs_code">
<pre>$ <span style="color: rgba(0, 0, 255, 1)">sudo</span> systemctl daemon-<span style="color: rgba(0, 0, 0, 1)">reload
$ </span><span style="color: rgba(0, 0, 255, 1)">sudo</span> systemctl enable node-<span style="color: rgba(0, 0, 0, 1)">exporter
$ </span><span style="color: rgba(0, 0, 255, 1)">sudo</span> systemctl start node-exporter</pre>
</div>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">node exporter 默认监听 9100 端口,让我们检查一下端口的监听情况:</span></p>
<div class="cnblogs_code">
<pre>$ ss -tunl</pre>
</div>
<p><span style="font-family: Microsoft YaHei; font-size: 15px"><img src="http://images2017.cnblogs.com/blog/952033/201710/952033-20171008154141746-1684463059.png"></span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">Node exporter 已经可以收集主机上的信息了,接下来我们还需要配置 Prometheus Server 从 node exporter 那里拉取数据。</span></p>
<h1><span style="font-family: Microsoft YaHei; font-size: 18pt">配置 Prometheus 从 Node Exproter 拉取数据</span></h1>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">Prometheus Server 可以从不同的 exporter 上拉取数据,对于上面的 node exporter 我们可以利用 Prometheus 的 static_configs 来拉取 node exporter 的数据。编辑 Prometheus server 的配置文件:</span></p>
<div class="cnblogs_code">
<pre>$ <span style="color: rgba(0, 0, 255, 1)">sudo</span> vim /usr/local/share/prometheus/prometheus.yml</pre>
</div>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">在 scrape_configs 中添加一个 名称为 node 的 static_configs:</span></p>
<div class="cnblogs_code">
<pre>- job_name: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">node</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
static_configs:
</span>- targets: [<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">127.0.0.1:9100</span><span style="color: rgba(128, 0, 0, 1)">"</span>]</pre>
</div>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">注意,要把上面的 IP 地址替换为运行 node exporter 的主机的 IP。</span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px"><img src="http://images2017.cnblogs.com/blog/952033/201710/952033-20171008154300653-314211700.png"></span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">保存文件然后重启 prometheus 服务!重启后 prometheus 服务会每隔 15s 从 node exporter 上拉取一次数据。</span></p>
<h1><span style="font-family: Microsoft YaHei; font-size: 18pt">查询数据</span></h1>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">Prometheus Server 提供了简易的 WebUI 可以进数据查询并展示,它默认监听的端口为 9090。接下来我们进行一次简单的查询来验证本文安装配置的系统。</span><br><span style="font-family: Microsoft YaHei; font-size: 15px">在浏览器中访问 Prometheus Server 的 9090 端口:</span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px"><img src="http://images2017.cnblogs.com/blog/952033/201710/952033-20171008154405871-557796225.png"></span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">在下拉菜单中选择 "node_memory_Buffers",然后点击 "Execute" 按钮:</span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px"><img src="http://images2017.cnblogs.com/blog/952033/201710/952033-20171008154434606-1118089211.png"></span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">查询出来的结果略微有些粗犷,连单位都没带。请选择 "Graph" 标签页:</span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px"><img src="http://images2017.cnblogs.com/blog/952033/201710/952033-20171008154501028-828630602.png"></span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">通过图表查看查询结果就好多了!</span></p>
<h1><span style="font-family: Microsoft YaHei; font-size: 18pt">总结</span></h1>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">Prometheus 是当下比较流行的开源监控工具,这里只是简单的介绍了安装过程及一个最基本的用例。但是不难看出 Prometheus 虽然支持灵活的查询语言,但是自身只支持简单的展示能力。如果要友好的展示 Prometheus 的查询结果,还需要使用更专业的展示工具 Grafana。</span></p>
</div>
<div id="MySignature" role="contentinfo">
<div>作者:sparkdev</div>
<div>出处:http://www.cnblogs.com/sparkdev/</div>
<div>本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。</div><br><br>
来源:https://www.cnblogs.com/sparkdev/p/7637583.html
頁:
[1]