前言
ELK 是指 Elasticsearch、Logstash 和 Kibana 這三個開源軟件的組合。
Elasticsearch 是一個分布式的搜索和分析引擎,用于日志的存儲,搜索,分析,查詢。
Logstash 是一個數(shù)據(jù)收集、轉(zhuǎn)換和傳輸工具,用于收集過濾和轉(zhuǎn)換數(shù)據(jù),然后將其發(fā)送到 Elasticsearch 或其他目標(biāo)存儲中。
Kibana 是一個數(shù)據(jù)可視化平臺,通過與 Elasticsearch 的集成,提供了強大的數(shù)據(jù)分析和儀表盤功能。
Filebeat 是 Elastic Stack(ELK)中的一個組件,用于輕量級的日志文件收集和轉(zhuǎn)發(fā)。它能夠?qū)崟r監(jiān)控指定的日志文件,并將其發(fā)送到 Elasticsearch 或 Logstash 進行處理和分析。
ELK的架構(gòu)有多種,本篇分享使用的架構(gòu)如圖所示: Beats(Filebeat) -> -> Elasticsearch -> Kibana,目前生產(chǎn)環(huán)境一天幾千萬的日志,內(nèi)存占用大概 10G 左右
特點
- 開源免費
- 靈活性和可擴展性,高可用性,易擴展,支持集群
- 高效的搜索和分析功能
- 實時性
- 易于使用
使用情況
- 目前微服務(wù)項目使用,ELK單機部署,處理千萬級日志無壓力
- 使用 Kibana 做了面板,根據(jù)面板監(jiān)控系統(tǒng)情況
- 使用 Docker 部署,方便快捷
- 上手用還算簡單,但是弄懂這一套,就不是那么容易了
- 提煉出 docker compose 配置,分分鐘部署好
實踐
準(zhǔn)備
- 一臺 linxu 服務(wù)器,內(nèi)存 8G+
- 安裝 docker,docker compose
- 新機器搭建后的運行情況,限制了Elasticsearch的jvm參數(shù) 4g
- 本篇文件目錄結(jié)構(gòu),完整文件在Github MeDevOps 倉庫
安裝
本篇 ELK 的版本為 v7.8.1,本篇使用的容器網(wǎng)絡(luò)為 devopsnetwork ,需創(chuàng)建 docker network create devopsnetwork
Elasticsearch 使用 docker compose 安裝
-
官方使用 Docker 安裝文檔
-
compose.yml
- 指定了jvm參數(shù):4g
- 暴露端口 9200:該端口是Elasticsearch REST API的默認(rèn)端口。
- 暴露端口 9300:該端口是Elasticsearch節(jié)點之間的內(nèi)部通信端口,默認(rèn)用于節(jié)點之間的集群通信
- 掛載數(shù)據(jù)目錄
./data
及配置文件./config/elasticsearch.yml
- 需要對兩個目錄進行授權(quán),這里直接用了777,也可以根據(jù)官網(wǎng)使用對應(yīng)es的用戶id 1000
version: '3.1'
services:
elk_elasticsearch:
image: elasticsearch:7.8.1
container_name: elk_elasticsearch
restart: always
environment:
- discovery.type=single-node
- ES_JAVA_OPTS=-Xms4096m -Xmx4096m
ports:
- 9200:9200
- 9300:9300
volumes:
# 授權(quán) chmod 777 ./config/ && chmod 777 ./data/
- ./data:/usr/share/elasticsearch/data
- ./config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
networks:
- devopsnetwork
networks:
devopsnetwork:
external: true
- config/elasticsearch.yml
network.host: 0.0.0.0
xpack:
ml.enabled: false
monitoring.enabled: false
security.enabled: false
watcher.enabled: false
將其拷貝到服務(wù)器執(zhí)行啟動即可
#cd /app/elasticsearch
mkdir ./config
mkdir ./data
chmod 777 ./config/ && chmod 777 ./data/
docker compose up -d
驗證訪問
Logstash 使用 docker compose 安裝
-
官方使用 Docker 安裝 文檔
-
compose.yml
- 暴露端口5044:用于接收來自其他主機的日志數(shù)據(jù)、
- 掛載的
./pipeline
和./config
目錄可以運行容器復(fù)制出來 - 需要將./config/logstash.yml 和 ./pipeline/logstash.conf 改成es地址,參考
version: '3.1'
services:
elk_logstash:
image: logstash:7.17.16
container_name: elk_logstash
restart: always
ports:
- 5044:5044
volumes:
# 授權(quán) chmod 777 ./logs/ && chmod 777 ./data/ && chmod 777 ./pipeline/ && chmod 777 ./config/
- /etc/timezone:/etc/timezone
- /etc/localtime:/etc/localtime:ro
- ./logs:/usr/share/logstash/logs
- ./data:/usr/share/logstash/data
- ./pipeline:/usr/share/logstash/pipeline
- ./config:/usr/share/logstash/config
networks:
- devopsnetwork
networks:
devopsnetwork:
external: true
-
pipeline/logstash.conf
- 根據(jù)需要修改 output ,這里將推送到es地址中
- 輸出插件文檔
input {
beats {
port => 5044
codec => json {
charset => "UTF-8"
}
}
}
filter {
}
output {
elasticsearch {
hosts => ["http://192.168.123.102:9200"]
index => "%{[app]}-%{+YYYY.MM.dd}"
}
stdout {
codec => rubydebug
}
}
將其拷貝到服務(wù)器執(zhí)行啟動即可
mkdir ./data
mkdir ./logs
chmod 777 ./logs/ && chmod 777 ./data/ && chmod 777 ./pipeline/ && chmod 777 ./config/
docker compose up -d
Kibana 使用 docker compose 安裝
-
官方使用 Docker 安裝文檔
-
compose.yml
- 指定es節(jié)點是單節(jié)點,多節(jié)點使用zen
- 掛載配置文件
./config/kibana.yml
- 暴露端口 5601:面板訪問端口
version: '3.1'
services:
elk_kibana:
image: kibana:7.8.1
container_name: elk_kibana
restart: always
environment:
- discovery.type=single-node
ports:
- 5601:5601
volumes:
- ./config/kibana.yml:/usr/share/kibana/config/kibana.yml
networks:
- devopsnetwork
networks:
devopsnetwork:
external: true
- config/kibana.yml
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://192.168.123.102:9200/"]
i18n.locale: "zh-CN"
xpack:
apm.ui.enabled: false
graph.enabled: false
ml.enabled: false
monitoring.enabled: false
reporting.enabled: false
security.enabled: false
grokdebugger.enabled: false
searchprofiler.enabled: false
將其拷貝到服務(wù)器執(zhí)行啟動即可
docker compose up -d
Filebeat 使用 docker compose 安裝
-
compose.yml
- 掛載filebeat的配置文件,數(shù)據(jù)目錄及日志目錄,需要設(shè)置權(quán)限
- 掛載容器外的日志到容器內(nèi)的日志采集目錄
version: '3.1'
services:
elk_filebeat:
image: elastic/filebeat:7.8.1
container_name: elk_filebeat
restart: always
volumes:
# 授權(quán) chmod 777 ./config/ && chmod 777 ./data/ && chmod 777 ./logs/ && chmod 777 /app/logs
- ./config/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro
- ./data:/usr/share/filebeat/data
- ./logs:/usr/share/filebeat/logs
- /app/logs:/app/logs
networks:
- devopsnetwork
networks:
devopsnetwork:
external: true
-
config/filebeat.yml
- hosts 節(jié)點需要配置 logstash 地址
- paths 指定日志目錄
output.logstash:
#logstash hosts
hosts: ["192.168.123.102:5044"]
fields_under_root: true
filebeat.inputs:
- type: log
enabled: true
paths:
- /app/logs/*/*.log
close_older: 24h
ignore_older: 24h
json.keys_under_root: true
json.overwrite_keys: true
encoding: utf-8
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 3
processors:
- add_host_metadata: ~
- add_cloud_metadata: ~
- drop_fields:
fields: ["log","@version","ecs","agent","beat","host","beat.hostname","beat.version","beat.name","prospector.type","input.type","host.id","host.name","host.os.build","host.os.family","host.os.name","host.os.platform","host.os.platform","log.file.path","tags","offset","host.architecture","host.os.version"]
安全使用
配置 nginx 域名轉(zhuǎn)發(fā)
server {
listen 80;
listen 443 ssl;
server_name kibana.devops.test.com; # 自行修改成你的域名
ssl_certificate /certs/kibana.devops.test.com/server.crt;
ssl_certificate_key /certs/kibana.devops.test.com/server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://192.168.123.102:5601;
proxy_http_version 1.1;
proxy_buffering off;
proxy_request_buffering off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
配置完成,即可使用域名訪問
配置 nginx 基本認(rèn)證
在Nginx配置文件中添加以下內(nèi)容
location / {
auth_basic "Restricted Content";
auth_basic_user_file /certs/kibana.devops.test.com/passwd;
...
}
添加對應(yīng)的passwd文件,使用 htpasswd 生成,如賬號密碼是 root devops666 的配置文件
root:WvesKBTr22.wY
可以使用我 metools 工具的 密碼生成器 生成
配置完成,重載配置后刷新頁面就提示輸入賬號密碼了
文章來源:http://www.zghlxwxcb.cn/news/detail-808811.html
配置 nginx IP白名單
location / {
allow 192.168.123.201; # 允許的IP地址
deny all; # 拒絕所有其他IP地址
}
后語
本篇只針對 ELK 的安裝進行了介紹及整理對應(yīng)的 Docker Compose 配置文件,后續(xù)即可快速安裝配置 ELK 環(huán)境,如何與項目結(jié)合使用后續(xù)再分享文章來源地址http://www.zghlxwxcb.cn/news/detail-808811.html
到了這里,關(guān)于使用 Docker Compose V2 快速搭建日志分析平臺 ELK (Elasticsearch、Logstash 和 Kibana)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!