在 Windows 上使用 Beats 和 Jenkins 日志读取进行 ELK 的基本实现





5.00/5 (1投票)
本文档将简要介绍如何在 Windows 上安装和使用 ELK,并结合 Winlogbeat 和 Jenkins 日志插件。
引言
这是一篇基础文章,介绍了在 Jenkins 和 Windows 日志事件中使用 ELK 的安装和配置详情。
ELK 基础知识
ELK 代表 Elasticsearch、Logstash 和 Kibana。
- Elasticsearch 是基于 Lucene 的搜索索引器。
- Logstash 用于暂存日志,并将其串行发送到 Elasticsearch。
- Kibana 是搜索索引的 UI 表示,用于在 Elasticsearch 中进行配置。
您可以直接将数据加载到 Elasticsearch 中。这三个工具都可以单独使用,但最好将它们一起使用。
这个工具栈的一个问题是安全性。如果需要,您需要手动添加安全层。例如,Kibana 是直接可访问的。但如果您需要用户授权,例如 SSO、LDAP 或自定义授权,您需要添加一个代理进行授权。在本文件中,我们将不涉及这方面的内容。
您可以直接将日志加载到 Elasticsearch。在本文件中,我们将只介绍基础知识。
安装
下载工具的链接。目前我们不打算使用 Docker。
- Elasticsearch:https://elastic.ac.cn/downloads/elasticsearch 下载 WINDOWS shaasc
- Logstash:https://elastic.ac.cn/downloads/logstash 下载 ZIP shaasc
- Kibana:https://elastic.ac.cn/downloads/kibana 下载 WINDOWS shaasc
- NSSM:https://nssm.cc/download 下载 nssm 2.24 (2014-08-31)
- Winlogbeats:https://elastic.ac.cn/downloads/beats/winlogbeat WINDOWS 64-BIT shaasc
我们可以使用各种 Beats,但对于本文档,我们只使用 Filebeat 和 Winlogbeat,并且不会深入探讨。
将所有 zip 文件解压到一个文件夹中。我将其命名为 `C:` 盘上的 `ELK_Stack` 文件夹。
由于我们要使用 Windows,我们需要将这些应用程序作为服务运行。
将 Elasticsearch 安装为服务
Elasticsearch 带有一个批处理文件,在命令提示符下运行该文件即可安装服务。
cd /d C:\ELK_stack\elasticsearch\bin
elasticsearch-service.bat install.
C:\ELK_stack\elasticsearch\config 目录下有一个名为 `elasticsearch.yml` 的配置文件 - 其中包含默认值。默认情况下,Elasticsearch 将运行在 9200 端口。
这将把 Elasticsearch 作为服务安装在 Windows 中。
将 Logstash 安装为服务
文件解压后,在与解压 Logstash 相同的文件夹下创建一个名为 `Logstash_config.conf` 的文件。这个文件可以放在系统中的任何位置,但为了更好地管理,我将其放在这里。
C:\ELK_stack\logstash
该文件是一个 JSON 文件。
\\logstash_config.conf
input {
file {
path => "D:/jenkins_QA/jobs/**/log"
start_position => "beginning"
}
file{
path=>"\\s608109dl2nsqa\stars_qa\EE\ContinuousDeployment/*/*.log"
start_position => "beginning"
}
beats {
port => 5044
}
tcp {
id=>"Jenkins_Plugin"
port => 5045
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
}
stdout { codec => rubydebug }
}
然后打开命令提示符并运行以下命令:
cd /d C:\ELK_stack\logstash\bin
logstash-plugin install logstash-output-tcp
logstash-plugin install logstash-input-beats
请记住,我们已经下载了 NSSM。
C:\ELK_stack\nssm\win64\nssm install
这将触发一个 UI。如果您想通过命令行运行,请随意尝试。
还有其他选项卡,我将其放在了“Elasticsearch 依赖项”下,但这是可选的。
现在转到服务管理器并启动服务。
Logstash 现已运行,我们稍后将看到它可以做些什么。
将 Kibana 安装为服务
这很简单。
cd /d C:\ELK_stack\kibana\bin
dir kaibana.bat
应该存在 `Kibana.bat`。
C:\ELK_stack\nssm\win64\nssm install
这将触发一个 UI。如果您想通过命令行运行,请随意尝试。
有几个设置可以修改,但现在我们暂时保持不变。
如果您想查看配置,它位于此处:
C:\ELK_stack\kibana\config\kibana.yml
默认端口是 5601,只要端口可访问,就可以从任何地方访问。理想情况下,Kibana 应该通过 Nginx 运行 https://logz.io/blog/securing-elk-nginx/。
但我们在这里不深入探讨。
将 WinLogbeat 安装为服务
将 zip 文件解压到另一个服务器上,您会发现有一个 PowerShell 脚本用于将 Winlogbeat 安装为服务。请继续运行 `install-service-winlogbeat.ps1`。
服务安装完成后,打开软件包中的 `config` 文件 `winlogbeat.yml`,并将第 122 行修改为 Logstash 的 IP 地址以及您在 Logstash 配置中指定的 beats 侦听器端口。在本例中,我们使用的是 `5044`。
output.logstash:
# The Logstash hosts
hosts: ["localhost:5044"]
转到服务并启动 `winlogbeat` 服务,它将开始将数据推送到 Logstash。
安装 Jenkins 插件
现在您已经安装了 Logstash,并且希望将 Jenkins 的构建数据发送到 Logstash。为此,首先安装:
- https://wiki.jenkins.io/display/JENKINS/Logstash+Plugin
http://<JenkinsIP:Port>/pluginManager/installed
在这里,我们假设 Jenkins 已经安装并正在运行其他插件,并且插件已安装。
现在让我们在 Jenkins 中配置插件。
http://<JenkinsIP:Port> /configure
这是我们在 `logstash_config.conf` 中为 TCP 输入配置的端口。
现在,所有 Jobs 都将开始被接收。
如果在推送日志时出现问题,您将看到如下错误:
[logstash-plugin]: Failed to send log data: <Logstash Server>:5045.
[logstash-plugin]: No Further logs will be sent to <Logstash Server>: 5045.
java.net.ConnectException: Connection refused: connect
配置 Kibana 以显示日志
<a href="https://:5601/app/kibana#/home?_g=()">https://:5601/app/kibana#/home?_g=()</a>
一旦您看到 Logstash 的索引,我们就可以创建一个索引模式,以便获取我们期望的数据。
所以在 **索引名称** 中,输入类似 **logstash-\*** 的内容。
现在如果您转到仪表板,您将看到类似这样的内容:
关注点
我在各种网站上学到的一个重要经验是——有提到很多 Logstash 已经安装了。当我运行 `logstash-plugin list` 命令时,总是会给我一个很长的列表。但是,直到我安装了 Filebeat 插件和 TCP-output 插件,无论我怎么尝试,我都无法使其工作。现在我所有的 Jenkins 构建日志都可以在 Kibana 中进行查看和精确搜索。
历史
- 2019 年 11 月 4 日:初始版本