<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>influxdb | 伪架构师</title>
    <link>/tags/influxdb/</link>
      <atom:link href="/tags/influxdb/index.xml" rel="self" type="application/rss+xml" />
    <description>influxdb</description>
    <generator>Source Themes Academic (https://sourcethemes.com/academic/)</generator><language>zh</language><lastBuildDate>Sun, 26 Feb 2017 09:59:19 +0800</lastBuildDate>
    <image>
      <url>/img/logo-wide.png</url>
      <title>influxdb</title>
      <link>/tags/influxdb/</link>
    </image>
    
    <item>
      <title>为 Gitlab 和 Jenkins 添加 InfluxDB 支持</title>
      <link>/post/influxdb-for-gitlab-jenkins/</link>
      <pubDate>Sun, 26 Feb 2017 09:59:19 +0800</pubDate>
      <guid>/post/influxdb-for-gitlab-jenkins/</guid>
      <description>

&lt;h2 id=&#34;概述&#34;&gt;概述&lt;/h2&gt;

&lt;p&gt;量化和监控对现在的开发运维工作的重要性是毋庸置疑的。在大肆鼓吹 DevOps 的今天，一体化的数据采集和可视化展示就尤为重要了。&lt;/p&gt;

&lt;p&gt;为了能在同一视图下对 Jenkins 和 Gitlab 的操作进行监控，本来写了一些数据采集的脚本，后发现这两个系统都有实现向 InfluxDB 发送指标数据的能力，虽说结构和数据的细致程度可能不及定制脚本，但懒人方案始终是更快的解决办法。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;非常对不起各位的是，下面的内容主要是堆代码了。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&#34;环境准备&#34;&gt;环境准备&lt;/h2&gt;

&lt;h3 id=&#34;docker&#34;&gt;Docker&lt;/h3&gt;

&lt;p&gt;为方便部署，这里采用 Docker 作为执行环境，过程中需要下载一些镜像，所以这里可能要配置代理或者其他途径来获得镜像文件并导入。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;这里假设宿主机 IP 为 10.211.55.5&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&#34;网络&#34;&gt;网络&lt;/h3&gt;

&lt;p&gt;因为几个组件之间互相需要访问，因此我们首先用如下命令创建一个虚拟网络：&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker network create devops&lt;/code&gt;&lt;/p&gt;

&lt;h2 id=&#34;influxdb&#34;&gt;InfluxDB&lt;/h2&gt;

&lt;h3 id=&#34;启动&#34;&gt;启动&lt;/h3&gt;

&lt;p&gt;首先启动我们的 InfluxDB，因为 GitLab 只能连接 InfluxDB 的 udp 端口，而官方版本的镜像并未提供这一功能的方便设置，所以这里采用了一个第三方镜像。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;这也是 DockerHub 上的常态 —— 嫡出被庶出灭了。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;#!/bin/sh
docker run -d --name=influxdb \
--restart=always \
--network=devops \
-v /var/volume/influxdb:/data \
-p 20002:8083 \
-p 20003:8086 \
-p 20004:8089/udp \
-e UDP_PORT=8089 \
-e UDP_DB=gitlab \
appcelerator/influxdb
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;稍微做一下解释：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;使用了上文创建的虚拟网络&lt;/li&gt;
&lt;li&gt;镜像为 appcelerator/influxdb&lt;/li&gt;
&lt;li&gt;宿主机上的 &lt;code&gt;/var/volume/influxdb&lt;/code&gt; 目录被加载到容器的 &lt;code&gt;/data&lt;/code&gt; 目录，用于数据存储的持久化。&lt;/li&gt;
&lt;li&gt;开放了三个端口：

&lt;ul&gt;
&lt;li&gt;8083：管理界面，可用浏览器访问&lt;/li&gt;
&lt;li&gt;8086：HTTP API&lt;/li&gt;
&lt;li&gt;8089：UDP 端口&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;UDP 端口对应的数据库名为 gitlab&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&#34;初始化&#34;&gt;初始化&lt;/h3&gt;

&lt;p&gt;镜像成功启动之后，就可以使用浏览器打开 &lt;code&gt;http://10.211.55.5:20002&lt;/code&gt;，用户名密码缺省为 &lt;code&gt;admin&lt;/code&gt;，主机和端口分别为 &lt;code&gt;10.211.55.5&lt;/code&gt; 和 &lt;code&gt;20003&lt;/code&gt;，这些填写结束后，就可以对 influxdb 进行管理了。&lt;/p&gt;

&lt;p&gt;分别为 gitlab 和 jenkins 创建数据库：&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-sql&#34;&gt;CREATE DATABASE &amp;quot;gitlab&amp;quot;
CREATE DATABASE &amp;quot;jenkins&amp;quot;
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&#34;gitlab&#34;&gt;Gitlab&lt;/h2&gt;

&lt;h3 id=&#34;启动-1&#34;&gt;启动&lt;/h3&gt;

&lt;p&gt;类似的，我们用如下脚本启动 Gitlab：&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;#!/bin/sh
docker run -d --name=gitlab \
--restart=always \
--network=devops \
-v /var/volume/gitlab/data:/var/opt/gitlab \
-v /var/volume/gitlab/conf:/etc/gitlab \
-v /var/volume/gitlab/log:/var/log/gitlab \
-p 21001:80 \
gitlab/gitlab-ce
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;跟前面的 InfluxDB 类似，或者说更加简单，连环境变量也不需要了。映射端口为 21001，加入同一个网络。&lt;/p&gt;

&lt;h3 id=&#34;配置&#34;&gt;配置&lt;/h3&gt;

&lt;p&gt;浏览器登录页面之后，进入 URL： &lt;code&gt;http://10.211.55.5:21001/admin/application_settings&lt;/code&gt;，对 Gitlab 进行设置。&lt;/p&gt;

&lt;p&gt;在 Metrics 一节，会看到 InfluxDB 的配置信息，选中 Enable 之后，只需要填写主机和 UDP 端口即可，因为有虚拟网络的配置，这里主机我们直接填写 influxdb，端口就是 8089 了。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;变更配置后，利用 &lt;code&gt;docker kill/rm&lt;/code&gt; 命令停止 gitlab，并重新启动。&lt;/strong&gt;&lt;/p&gt;

&lt;h3 id=&#34;验证&#34;&gt;验证&lt;/h3&gt;

&lt;p&gt;接下来我们可以选择一个项目进行 commit/push 操作，然后进入前面提到的 InfluxDB 控制台。
页面右上角的数据库选择 &lt;code&gt;gitlab&lt;/code&gt;，在查询输入框中输入 &lt;code&gt;SHOW MEASUREMENTS&lt;/code&gt; 并执行，会看到 gitlab 在这一数据库中建立了各个数据表。&lt;/p&gt;

&lt;p&gt;继续输入 &lt;code&gt;select * from events&lt;/code&gt;，会看到我们刚刚进行的提交记录。&lt;/p&gt;

&lt;h2 id=&#34;jenkins&#34;&gt;Jenkins&lt;/h2&gt;

&lt;h3 id=&#34;启动-2&#34;&gt;启动&lt;/h3&gt;

&lt;p&gt;这里用了我自己的 Jenkins 镜像，完成的还是映射端口、挂接存储的任务。&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;#!/bin/sh
docker run -d --name=jenkins \
--restart=always \
--network=devops \
-v /var/volume/jenkins/data:/data/jenkins \
-v /var/volume/jenkins/maven:/data/maven \
-v /var/volume/jenkins/sonar:/data/sonar \
-v /var/volume/jenkins/kube:/data/kube \
-v /var/volume/jenkins/robot:/data/robot \
-p 21003:8080 \
dustise/jenkins
&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id=&#34;配置-1&#34;&gt;配置&lt;/h3&gt;

&lt;p&gt;启动之后访问&lt;code&gt;http://10.211.55.5:21003&lt;/code&gt;，对 Jenkins 进行配置。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;http://10.211.55.5:21003/pluginManager/available&lt;/code&gt; 在这一界面查找 &lt;code&gt;InfluxDB&lt;/code&gt; 插件，进行安装启用。&lt;/p&gt;

&lt;p&gt;InfluxDB 插件启用之后，就可以在 &lt;code&gt;http://10.211.55.5:21003/configure&lt;/code&gt; 找到其配置内容，这里也就是设置一个 InfluxDB 连接到我们之前启动的数据库。&lt;/p&gt;

&lt;p&gt;点击 &lt;code&gt;New InfluxDB Target&lt;/code&gt; 按钮，在弹出的输入项目中，URL 填写为 &lt;code&gt;http://influxdb:8086&lt;/code&gt;，用户名密码同上，数据库为 &lt;code&gt;jenkins&lt;/code&gt;。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;retentionPolicy&lt;/code&gt; 一项可以清空。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;exposeExceptions&lt;/code&gt; 这一项目表示，向 InfluxDB 汇报数据的任务如果失败，是否标记所属 Build 过程为失败。&lt;/p&gt;

&lt;h3 id=&#34;验证-1&#34;&gt;验证&lt;/h3&gt;

&lt;p&gt;首先我们创建一个新的 FreeStyle 项目，内容很简单，执行一个 &lt;code&gt;echo &amp;quot;Hello world&amp;quot;&lt;/code&gt;。&lt;/p&gt;

&lt;p&gt;在构建后步骤中，可以看到 &lt;code&gt;Post Build Actions&lt;/code&gt; 新增了 &lt;code&gt;Publish build data to InfluDB&lt;/code&gt;的动作。&lt;/p&gt;

&lt;p&gt;添加这一动作之后，选择我们刚才建立的 InfluxDB Target。&lt;/p&gt;

&lt;p&gt;Job 创建完成，就可以开始 Build 了。&lt;/p&gt;

&lt;p&gt;Build 成功之后，我们可以在 InfluxDB 控制台上，切换到 Jenkins 数据库，执行 &lt;code&gt;SHOW MEASUREMENTS&lt;/code&gt;，可以看到 Jenkins 创建的数据表。运行 &lt;code&gt;SELECT * FROM jenkins_data&lt;/code&gt; 进行查询，就会看到我们刚才的 Build 数据。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Robot 等插件也会将结果插入 InfluxDB&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&#34;展示&#34;&gt;展示&lt;/h2&gt;

&lt;p&gt;有了这些数据，我们就可以以项目为单位，利用 Grafana 或者其他可视化工具，对结果进行叠加和展示了。&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
