軟體說明
ELK 是由 Elasticsearch、Logstash、Kibana 所組成
Elasticsearch 是一套開源式的分散式搜尋引擎 Elasticsearch - 官方文件
Logstash 可將蒐集到的Log做進一步處理,Parse成統一格式 Logstash - 官方文件
Kibana 則是可將Elasticsearch的資料 視覺化的呈現在前端 Kibana - 官方文件
擴充工具
beats 是輕量級的系統監測收集器,可將收集到的 data 進行轉拋
beat有很多種工具可參考 beats - 官方文件
本文使用到 Filebeat - 官方文件 可即時監測Log檔是否異動,進行資料轉拋
機器環境&服務
環境
Linux Server: Ubuntu 18.04.6 LTS
服務: Kibana、ElasticSeatch、LogStash、RedisWindows Clinet: Win 10
服務: Filebeat
範例說明
透過 Filebeat 監控在 Windows機器上的Log檔 及時拋送Log資料到
Linux機器的Redis上,而LogStash 會抓Redis上的資料 進行二次資料Parse處理,再轉拋到ElasticSeatch上,最後在Kibana呈現
Linux Server 端安裝服務
安裝Docker
參考 w4560000 - Linux 安裝 Docker、Docker-Compose
建立 logstash.conf
目前目錄
# 建立 Logstash 資料夾
mkdir logstash
# 建立 conf.d 資料夾
cd logstash
mkdir conf.d
cd conf.d
vim logstash.conf
修改 logstash.conf
input {
redis {
host => "redis"
port => 6379
data_type => "list"
key => "log_test"
password => "xxx"
}
}
output {
elasticsearch {
hosts => ["elasticsearch"]
index => "%{[fields][env]}_%{[fields][service]}-%{+YYYY.MM.dd}"
}
}
docker-compose 建立 redis、logstash、elasticsearch、kibana 服務
#返回 logstash 所屬目錄
cd ../..
vim docker-compose.yml
version: '3'
services:
kibana:
container_name: kibana
image: kibana:7.8.0
depends_on:
- elasticsearch
ports:
- 5601:5601
environment:
SERVER_NAME: kibana-server
ELASTICSEARCH_HOSTS: http://elasticsearch:9200
logstash:
container_name: logstash
image: logstash:5.3.1
ports:
- 5044:5044
restart: always
environment:
LOG_LEVEL: error
command: -f /etc/logstash/conf.d/
volumes:
- ./logstash/conf.d/:/etc/logstash/conf.d
depends_on:
- elasticsearch
elasticsearch:
container_name: elasticsearch
image: elasticsearch:7.8.0
environment:
- discovery.type=single-node
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
ports:
- 9200:9200
volumes:
- /data01:/usr/share/elasticsearch/data
redis:
container_name: redis
image: redis:3.2.4
entrypoint: redis-server --maxmemory "4gb" --requirepass xxx
ports:
- 6379:6379
restart: always
volumes:
- /data/redis:/data
sysctls:
net.core.somaxconn: '511'
將服務跑起來
返回根目錄
sudo mkdir data01
sudo chmod 777 data01
# 返回 docker-compose.yml 所屬目錄
sudo docker-compose up -d
當ElasticSearch 發生錯誤 建立失敗時 出現錯誤訊息
ElasticsearchException[failed to bind service]; nested: AccessDeniedException[/usr/share/elasticsearch/data/nodes];
因為Container內/usr/share/elasticsearch/data/nodes 與 主機的data01綁定 需設定 data01的資料夾權限
確認服務是否正常
ElasticSearch
Kibana
至此 Linux Server 服務已經建立完成
Windows Client 端安裝服務
安裝 Filebeat
設定filebeat.yml
解壓縮後 開啟資料夾 修改 filebeat.yml
...略
- input_type: log
enabled: true
paths: D:\LogFiles\WebLog\ELK_Test\*.log
fields:
service: weblog
fields.webtype: ELK_Test
multiline.pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}'
multiline.negate: true
multiline.match: after
...略
最下面 output 設定輸出 redis
output.redis:
# Boolean flag to enable or disable the output module.
enabled: true
# The list of Redis servers to connect to. If load balancing is enabled, the
# events are distributed to the servers in the list. If one server becomes
# unreachable, the events are distributed to the reachable servers only.
# hosts: ["localhost"]
# Your Redis Server IP
hosts: ["x.x.x.x"]
# The Redis port to use if hosts does not contain a port number. The default
# is 6379.
# port: 14011
# The name of the Redis list or channel the events are published to. The
# default is filebeat.
key: log_test
# The password to authenticate with. The default is no authentication.
password: xxx
當有資料寫進 D:\LogFiles\WebLog\ELK_Test*.log時,filebeat會將資料存入Redis
啟動Filebeat服務
CD 至 filebeat-7.7.0-windows-x86_64 資料夾
以系統管理員 開啟 powershell 將 filebeat 註冊至 windows service
./install-service-filebeat
windows service中 啟動 filebeat
至此 Filebeat 服務已經建立完成
kibana 建立 index pattern
http://YourIP:5601/app/kibana#/home
進入 Management => Stack Management
點擊 Index Patterns => Create index pattern
建立 index pattern
需有現有的 index 才能建立 index pattern
dev_weblog-2022.01.07 為 logstash 從 redis 取資料後寫入 elasticsearch 的
確認Kibana Log資料
點擊 剛剛建立的 index pattern : dev_weblog*
可以發現 message 中的 Log 時間跟 ElasticSeatch 的 Time 不同
因為 Filebeat 轉拋時會傳轉拋資料當下的時間,跟 Log 的時間會有落差
下一篇 w4560000 - Logstash Parse Timestamp 會說明在Logstash Parse資料時 處理時間差
轉載請註明來源,若有任何錯誤或表達不清楚的地方,歡迎在下方評論區留言,也可以來信至 leozheng0621@gmail.com
如果文章對您有幫助,歡迎斗內(donate),請我喝杯咖啡