通过使用winlogbeat + Elasticsearch + Kibana来可视化Windows系统日志,甚至可以自动化安装
首先
我已经尝试了由Elastic提供的winlogbeat(ver.1.2.3)。
本篇文章主要内容包括:
– 使用Ansible playbook自动安装winlogbeat
– 使用docker-compose构建Elasticsearch和Kibana环境
然而,由于尚未进行充分的验证,因此请将其限定在验证环境下进行演示和示范使用。
1.1.winlogbeat是什么
Winlogbeat是用于收集Windows事件日志并将其发送到Elasticsearch的工具。
它扮演了ELK堆栈中logstath的角色。
值得注意的是,beats和logstath可以协同工作,但这次没有使用logstash。
我根据elastic公司官方网站的文档,在Ansible上创建了一个playbook,用于安装winlogbeat(ver.1.2.3)到Windows服务器。
1. 关于Elasticsearch和Kibana
根据这篇文章的参考,我另外创建了一个不包括Fluentd部分的版本,并在Docker上使用docker-compose来搭建。
2. 环境
Windows Server
WindowsServer2012 R2
winlogbeat ver. 1.2.3
Elasticsearch / Kibana Server
CentOS7.2
Docker ver. 1.12.0
Docker-compose ver. 1.8.0
Elasticsearch ver. 2.3.4
Kibana Ver. 4.5.3
Ansible server
CentOS6.7
Ansible ver. 2.2.0 (devel 3c65c03a67)
3. 下载安装
3.1. Elasticsearch 和 Kibana 的环境建设
如果您已经有Elasticsearch和Kibana环境,请忽略本部分。
在安装winlogbeat之前,请先建立所需的Elasticsearch和Kibana环境。
本次我们将使用Docker-compose在Docker上进行搭建。
3.1.1. 下载资料(例如Docker-compose.yml)。
在可以使用Docker-compose的服务器上的任意目录中执行以下内容。
git clone https://github.com/tbuchi888/elasticsearch-kibana-docker-compose.git
cd elasticsearch-kibana-docker-compose
如果无法使用git,可以从以下的github链接中下载zip文件等来使用:
https://github.com/tbuchi888/elasticsearch-kibana-docker-compose
请使用以下的源代码文件。
文件结构
docker-compose.yml
elasticsearch/
- Dockerfile
docker-compose.yml 可以被用作 Docker 整合的配置文件。
elasticsearch:
build: elasticsearch
ports:
- 9200:9200
kibana:
image: kibana
ports:
- 9204:5601
environment:
- ELASTICSEARCH_URL=http://elasticsearch:9200
links:
- elasticsearch
弹性搜索/容器文件
FROM elasticsearch
RUN bin/plugin install mobz/elasticsearch-head
EXPOSE 9200
CMD ["bin/elasticsearch", "-Des.insecure.allow.root=true"]
3.1.2. 启动Docker
在包含docker-compose.yml文件的目录中启动docker。
docker-compose up -d
另外,停止命令如下。
docker-compose stop
以上是elasticsearch-kibana的安装已完成。
3.2. 安装winlogbeat
在Ansible服务器上的任意目录中执行以下操作。
3.2.1 资源下载(winlogbeat主程序zip,win_unzip模块使用的pscx.msi)
请提前下载以下文件,并将其放置在files目录中。
-
- files/winlogbeat-1.2.3-windows.zip
winlogbeat-1.2.3-windows.zip
sha1
files/pscx.msi
pscx.msi
ブラウザ等でダウンロードしてください。wgetではうまくダウンロードできませんでした。
こちらの環境でダウンロードしたファイルはPscx-3.2.0.msiでしたのでファイルをfilesディレクトリへ配置する際にpscx.msiへrenameしてご使用ください。
3.2.2 根据自己的环境进行变更,下载所需资源(如Ansible Playbook)。
git clone https://github.com/tbuchi888/ansible_winlogbeat.git
cd ansible_winlogbeat/
如果无法使用git的环境,可以选择从以下github链接中下载压缩文件等方式来使用:
https://github.com/tbuchi888/ansible_winlogbeat
请使用以下的源文件。
文件结构
files/
- pscx.msi # 項番3.2.1.でダウンロードしたもの win_unzipモジュールで利用します
- winlogbeat-1.2.3-windows.zip # 項番3.2.1.でダウンロードしたもの winlogbeat本体
hosts # Ansibleのインベントリファイル
install_winlogbeat.yml # Ansible playbook
templates/
- winlogbeat.yml.j2 # AnsibleのJinja2テンプレート
请根据以下环境进行相应修改。
即使您通过git clone或从github下载zip文件,也同样适用。
[win]
win01 # インストール対象windowsサーバ
win02 # インストール対象windowsサーバ
[win:vars]
ansible_user=ansible_user
ansible_password=ansible_password
ansible_port=5985
ansible_connection=winrm
安装_install_winlogbeat.yml_
请根据以下环境适时更改Elasticsearch的变量。如果使用了git clone或从github下载zip文件,也同样需要进行更改。
---
- hosts: win
# Don't gather hosts facts for performance
gather_facts: no
vars:
# Elasticsearch hosts
elas_hosts: 192.168.33.100 #Elasticsearch(Dockerサーバ)のwindowsサーバから名前解決可能なホスト名またはIPアドレス 自分の環境に合わせて変更してください
elas_hosts_port: 9200 #Elasticsearchのport番号
# reinstall winlogbeat
reinstall: true #再インストールする場合はtrueを指定
# Setting the task
tasks:
#以下は再インストール用の設定です。かなり強引なことをしているので。
#不要な場合は削除するかreinstallをfalseに設定してください。
# ここから ----
- name: Preparing for Step Winlogbeat Stopped with ignore errors
win_service:
name: winlogbeat
start_mode: auto
state: stopped
ignore_errors: true
when: reinstall==true
- name: Preparing for Step Remove directory
raw: Remove-Item -Path C:\progra~1\winlogbeat\ -Force -Recurse -ErrorAction SilentlyContinue
ignore_errors: true
when: reinstall==true
# ここまで ----
- name: Preparing for Step Create work directory
win_file:
path: "C:/work/"
state: "directory"
- name: Preparing for Step Copy zip file of Winlogbeat
win_copy:
src: "files/winlogbeat-1.2.3-windows.zip"
dest: "C:/work/winlogbeat-1.2.3-windows.zip"
- name: Preparing for Step Copy PSCX msi
win_copy:
src: "files/pscx.msi"
dest: 'C:\work\pscx.msi'
- name: Preparing for Step Install PSCX
win_msi:
path: 'C:\work\pscx.msi'
- name: Preparing for Step Decompression zip file
win_unzip:
src: "C:/work/winlogbeat-1.2.3-windows.zip"
dest: "C:/work/winlogbeat"
- name: Preparing for Step Move directory
raw: Move-Item -Path "C:\work\winlogbeat\winlogbeat-1.2.3-windows\" -Destination "C:\progra~1\winlogbeat\"
- name: Preparing for Step Change config of Winlogbeat
win_template:
src: templates/winlogbeat.yml.j2
dest: C:/progra~1/winlogbeat/winlogbeat.yml
- name: Winlogbeat Step1 Installing Winlogbeat
raw: PowerShell.exe -ExecutionPolicy UnRestricted -File C:\progra~1\winlogbeat\install-service-winlogbeat.ps1
- name: Winlogbeat Step2 Configuring Winlogbeat
raw: C:\progra~1\winlogbeat\winlogbeat.exe -c C:\progra~1\winlogbeat\winlogbeat.yml -configtest -e
# Skip Winlogbeat Step3 Configuring Winlogbeat to Use Logstash
- name: Winlogbeat Step4 Loading the Index Template in Elasticsearch
raw: Invoke-WebRequest -Method Put -InFile C:\progra~1\winlogbeat\winlogbeat.template.json -Uri http://{{ elas_hosts }}:{{ elas_hosts_port }}/_template/winlogbeat?pretty -UseBasicParsing
- name: Winlogbeat Step5 Starting Winlogbeat
win_service:
name: winlogbeat
start_mode: auto
state: started
模板/ winlogbeat.yml.j2
请参考以下链接,因为这段太长。
https://raw.githubusercontent.com/tbuchi888/ansible_winlogbeat/master/templates/winlogbeat.yml.j2
以下是一个使用Ansible playbook定义变量并将其修改为Jinja2模板的例子,该模板位于winlogbeat-1.2.3-windows.zip的winlogbeat.yml中,用于Elasticsearch的主机信息。
请注意,由于中文使用了一些特殊字符,因此无法提供完全一致的汉语翻译。这是一个大致的表达,可能需要根据上下文进行某些微调。
#diff winlogbeat.yml winlogbeat.yml.j2
42c42
< hosts: ["localhost:9200"]
---
> hosts: ["{{ elas_hosts }}:{{ elas_hosts_port }}"]
执行Ansible playbook 3.2.3。
在Ansible服务器上运行以下playbook,并安装winlogbeat到Windows服务器。
ansible-playbook -i hosts install_winlogbeat.yml -v
winlogbeat安装已完成。
4. Kibana的初始设置和日志确认
通过浏览器访问Kibana(http://192.168.33.100:9204/ ※192.168.33.100为Docker的IP),然后在”Setting”选项卡中注册索引模式。

将(logstash-となっている部分)改为`winlogbeat-,然后点击Create按钮。

我将确认在”探索”选项卡中,能够收集到日志。

以上