0.はじめに
Elastic社より提供されているwinlogbeat(ver.1.2.3)について試してみました。
本記事では主に以下を記載します。
- winlogbeatのインストールを自動化するAnsible playbook
- Elasticsearch及びKibanaの環境を構築するdocker-compose
なお、十分な検証が行えているわけではありませんので検証環境等でのデモ、素振り用などに限定してお使いください。
1.1.winlogbeatとは
winlogbeatはWindowsのイベントログを収集し、Elasticsearchへ投げてくれるものです。
いわゆるELKスタックのlogstathにあたる部分を担います。
なお、beatsとlogstathは連携可能ですが、今回logstashは利用していません。
elastic社の公式サイトドキュメントを参考にしてAnsibleよりWindowsServerへwinlogbeat(ver.1.2.3)をインストールするplaybookを作成しました。
1.2.Elasticsearch及びKibanaについて
こちらの記事を参考にfluentdの部分を除いたものを別途作成しdocker-composeでDocker上に構築しています。
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
elasticsearch:
build: elasticsearch
ports:
- 9200:9200
kibana:
image: kibana
ports:
- 9204:5601
environment:
- ELASTICSEARCH_URL=http://elasticsearch:9200
links:
- elasticsearch
elasticsearch/Dockerfile
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
- 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からZipなどでダウンロードしたもの利用するか
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テンプレート
hosts
以下環境に合わせて適時書き換えてください。
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
templates/winlogbeat.yml.j2
長いのでこちらを参照してください。
https://raw.githubusercontent.com/tbuchi888/ansible_winlogbeat/master/templates/winlogbeat.yml.j2
winlogbeat-1.2.3-windows.zipの中にあるwinlogbeat.yml
を
Elasticsearchのホスト情報について
以下のようにAnsibleのplaybookで定義している変数へ変更したJinja2テンプレートです。
#diff winlogbeat.yml winlogbeat.yml.j2
42c42
< hosts: ["localhost:9200"]
---
> hosts: ["{{ elas_hosts }}:{{ elas_hosts_port }}"]
3.2.3.Ansible playbookの実行
Ansibleサーバ上で以下playbookを実行し、windowsサーバへwinlogbeatをインストールします。
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
タブでindexパターンを登録します。
(logstash-*となっている部分を)winlogbeat-*
に書き換えてCreate
ボタンを押下します。
discover
タブでログが収集できていることを確認します。
以上