Jenkins与elasticsearch的联动-Jenkins日志收集方法

899 阅读2分钟

在活动的开始我写的是elastic stack的相关文章,但发现没什么人看,转为撰写Jenkins相关的东西。转眼来到了尾声了,其实这两者是可以有关联的。我们可以将Jenkins的日志发送给elasticsearch。

安装与配置logstash插件

先在插件中心搜索安装Logstash。

在系统配置中找到并打开这个选项

image.png

除了elasticsearch,还有Logstash自己、Rabbit MQ、Redis等可以作为日志接收方。

image.png

因为我以前配置的elastic没有身份认证,所以这里不需要填用户名密码以及高级设置中的证书配置。

image.png

URI配置中http://127.0.0.1:9200 是elastic的路径,jenkins是想要添加的索引的名称,这个可以是一个自定义的名称。_doc 是elastic的语法,代表了写入数据

 

Job任务的配置

进入任务配置界面,在General区域会有Send console log to Logstash的选项,勾选后会将构建的日志逐条发送到elasticsearch数据库中。

此时可以在kibana上查看数据,查看前先建立一个和前面index对应的索引。

数据库页面大致是这样的

image.png

前几项中会标识这条数据的来源,因为我写了很多test,所以这里解释下。data开头的是数据的附带信息,buildHost是构建的节点名称,buildLabel是构建的标签,buildNum是构建的编号

image.png

data.buildVariables开头的是构建的环境变量。任务名称和Jenkins地址都在上面。data开头的和他有很多重复的项目。

image.png

最后的message是消息的主体。

image.png  

如果不想这么零散的发送日志,那么可以在post阶段发送日志,配置了最大行数,最大值超过的将只会提取最后的配置行发送给数据库。

image.png

此时在kibana页面上展示的数据将是通过逗号分隔的一个大字符串

image.png

分散配置中只有最后一条会带上data.result来展示构建的结果状态,所以单条提取还是很好用的。不足的地方就是日志上的时间不能很好的确定。

这里我提出了一个问题单,希望他们有时间能加上这个功能。

[JENKINS-71559] add timestamp to each line when add logstash step at postbuild step - Jenkins Jira

 

全局配置

如果每个工程都要配置,那么后装这个插件的配置人员要累死了,所以系统配置里有个Enable Globally选项,勾选后可以使跑的工程默认带上日志传送的配置。要注意这个配置下的日志是分散的。

 

image.png

这里加个选项来进行配置为整体的需求已经有用户反馈了,希望能在后续版本更新。

[JENKINS-69829] send entire log as one entry to es after setting enable globally to true - Jenkins Jira