通过使用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”选项卡中注册索引模式。

kibana_index.png

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

kibana_index2.png

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

kibana_discover.png

以上

bannerAds