比 ELK 更簡潔、高效!企業(yè)級日志平臺后起之秀 Graylog!
Graylog 服務介紹
Graylog - 日志監(jiān)控系統(tǒng)
Graylog 是一個開源的日志聚合、分析、審計、展現(xiàn)和預警工具。在功能上來說,和 ELK 類似,但又比 ELK 要簡單很多。依靠著更加簡潔,高效,部署使用簡單的優(yōu)勢很快受到許多人的青睞。當然,在擴展性上面確實沒有比 ELK 好,但是其有商業(yè)版本可以選擇。
Graylog - 工作流程介紹
部署 graylog 最簡單的架構就是單機部署,復雜的也是部署集群模式,架構圖示如下所示。我們可以看到其中包含了三個組件,分別是 Elasticsearch、MongoDb 和 Graylog。其中,Elasticsearch 用來持久化存儲和檢索日志文件數據(IO 密集),MongoDb 用來存儲關于 Graylog 的相關配置,而 Graylog 來提供 Web 界面和對外接口的(CPU 密集)。

最小化單機部署最優(yōu)化集群部署

Graylog 組件功能
配置 Graylog 服務的核心就是理解對應組件的功能以及其運作方式!
簡單來講,Input 表示日志數據的來源,對不同來源的日志可以通過 Extractors 來進行日志的字段轉換,比如將 Nginx 的狀態(tài)碼變成對應的英文表述等。然后,通過不同的標簽類型分組成不用的 Stream,并將這些日志數據存儲到指定的 Index 庫中進行持久化保存。

Graylog 通過 Input 搜集日志,每個 Input 單獨配置 Extractors 用來做字段轉換。Graylog 中日志搜索的基本單位是 Stream,每個 Stream 可以有自己單獨的 Elastic Index Set,也可以共享一個 Index Set。
Extractor 在 System/Input 中配置。Graylog 中很方便的一點就是可以加載一條日志,然后基于這個實際的例子進行配置并能直接看到結果。內置的 Extractor 基本可以完成各種字段提取和轉換的任務,但是也有些限制,在應用里寫日志的時候就需要考慮到這些限制。Input 可以配置多個 Extractors,按照順序依次執(zhí)行。
系統(tǒng)會有一個默認的 Stream,所有日志默認都會保存到這個 Stream 中,除非匹配了某個 Stream,并且這個 Stream 里配置了不保存日志到默認 Stream。可以通過菜單 Streams 創(chuàng)建更多的 Stream,新創(chuàng)建的 Stream 是暫停狀態(tài),需要在配置完成后手動啟動。Stream 通過配置條件匹配日志,滿足條件的日志添加 stream ID 標識字段并保存到對應的 Elastic Index Set 中。
Index Set 通過菜單 System/Indices 創(chuàng)建。日志存儲的性能,可靠性和過期策略都通過 Index Set 來配置。性能和可靠性就是配置 Elastic Index 的一些參數,主要參數包括,Shards 和 Replicas。
除了上面提到的日志處理流程,Graylog 還提供了 Pipeline 腳本實現(xiàn)更靈活的日志處理方案。這里不詳細闡述,只介紹如果使用 Pipelines 來過濾不需要的日志。下面是丟棄 level > 6 的所有日志的 Pipeline Rule 的例子。從數據采集(input),字段解析(extractor),分流到 stream,再到 pipeline 的清洗,一氣呵成,無需在通過其他方式進行二次加工。
Sidecar 是一個輕量級的日志采集器,通過訪問 graylog 進行集中式管理,支持 linux 和 windows 系統(tǒng)。Sidecar 守護進程會定期訪問 graylog 的 REST API 接口獲取 Sidecar 配置文件中定義的標簽(tag) ,Sidecar 在首次運行時會從 graylog 服務器拉取配置文件中指定標簽(tag) 的配置信息同步到本地。目前 Sidecar 支持 NXLog,F(xiàn)ilebeat 和 Winlogbeat。他們都通過 graylog 中的 web 界面進行統(tǒng)一配置,支持 Beats、CEF、Gelf、Json API、NetFlow 等輸出類型。Graylog 最厲害的在于可以在配置文件中指定 Sidecar 把日志發(fā)送到哪個 graylog 群集,并對 graylog 群集中的多個 input 進行負載均衡,這樣在遇到日志量非常龐大的時候,graylog 也能應付自如。
rule "discard debug messages"
when
to_long($message.level) > 6
then
drop_message();
end
日志集中保存到 Graylog 后就可以方便的使用搜索了。不過有時候還是需要對數據進行近一步的處理。主要有兩個途徑,分別是直接訪問 Elastic 中保存的數據,或者通過 Graylog 的 Output 轉發(fā)到其它服務。

服務安裝和部署
主要介紹部署 Filebeat + Graylog 的安裝步驟和注意事項!

部署 Filebeat 工具
官方提供了多種的部署方式,包括通過 rpm 和 deb 包安裝服務,以及源代碼編譯的方式安裝服務,同時包括了使用 Docker 或者 kubernetes 的方式安裝服務。我們根據自己的實際需要,進行安裝即可。
# Ubuntu(deb)
$ curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.8.1-amd64.deb
$ sudo dpkg -i filebeat-7.8.1-amd64.deb
$ sudo systemctl enable filebeat
$ sudo service filebeat start
# 使用docker啟動
docker run -d --name=filebeat --user=root \
--volume="./filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro" \
--volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" \
--volume="/var/run/docker.sock:/var/run/docker.sock:ro" \
docker.elastic.co/beats/filebeat:7.8.1 filebeat -e -strict.perms=false \
-E output.elasticsearch.hosts=["elasticsearch:9200"]

部署 Graylog 服務
我們這里主要介紹使用 Docker 容器來部署服務,如果你需要使用其他方式來部署的話,請自行查看官方文檔對應章節(jié)的安裝部署步驟。在服務部署之前,我們需要給 Graylog 服務生成等相關信息,生成部署如下所示:
# 生成password_secret密碼(最少16位)
$ sudo apt install -y pwgen
$ pwgen -N 1 -s 16
zscMb65...FxR9ag
# 生成后續(xù)Web登錄時所需要使用的密碼
$ echo -n "Enter Password: " && head -1 </dev/stdin | tr -d '\n' | sha256sum | cut -d" " -f1
Enter Password: zscMb65...FxR9ag
77e29e0f...557515f
生成所需密碼信息之后,我們將如下 yml 信息保存到 docker-comopse.yml 文件中,使用 docker-compose 命令啟動該服務,即可完成部署。之后,通過瀏覽器訪問對應服務器地址的 9000 端口,即可登錄主頁 。
version: "3"
services:
mongo:
restart: on-failure
container_name: graylog_mongo
image: "mongo:3"
volumes:
- "./mongodb:/data/db"
networks:
- graylog_network
elasticsearch:
restart: on-failure
container_name: graylog_es
image: "elasticsearch:6.8.5"
volumes:
- "./es_data:/usr/share/elasticsearch/data"
environment:
- http.host=0.0.0.0
- transport.host=localhost
- network.host=0.0.0.0
- "ES_JAVA_OPTS=-Xms512m -Xmx5120m"
ulimits:
memlock:
soft: -1
hard: -1
deploy:
resources:
limits:
memory: 12g
networks:
- graylog_network
graylog:
restart: on-failure
container_name: graylog_web
image: "graylog/graylog:3.3"
ports:
- 9000:9000 # Web服務提供的訪問端口
- 5044:5044 # Filebeat工具提供端口
- 12201:12201 # GELF TCP
- 12201:12201/udp # GELF UDP
- 1514:1514 # Syslog TCP
- 1514:1514/udp # Syslog UDP
volumes:
- "./graylog_journal:/usr/share/graylog/data/journal"
environment:
- GRAYLOG_PASSWORD_SECRET=zscMb65...FxR9ag
- GRAYLOG_ROOT_PASSWORD_SHA2=77e29e0f...557515f
- GRAYLOG_HTTP_EXTERNAL_URI=http://11.22.33.44:9000/
- GRAYLOG_TIMEZONE=Asia/Shanghai
- GRAYLOG_ROOT_TIMEZONE=Asia/Shanghai
networks:
- graylog
depends_on:
- mongo
- elasticsearch
networks:
graylog_network:
driver: bridge
需要注意的是,GELF(Graylog Extended Log Format) 的 input 模式可以接受結構化的事件,支持壓縮和分塊。恰好,Docker 服務的 log-driver 驅動原生提供了 GELF 的支持。只需要我們在 Graylog 的 system/inputs 下面創(chuàng)建對應的 input 之后,啟動容器時候指定 log-driver,就可以將容器內的輸出都會發(fā)送到 Graylog 里面了。
# [docker] 啟動容器指定地址和driver
docker run --rm=true \
--log-driver=gelf \
--log-opt gelf-address=udp://11.22.33.44:12201 \
--log-opt tag=myapp \
myapp:0.0.1
# [docker-compose] 啟動使用方式
version: "3"
services:
redis:
restart: always
image: redis
container_name: "redis"
logging:
driver: gelf
options:
gelf-address: udp://11.22.33.44:12201
tag: "redis"
......
Graylog 界面功能
主要介紹 Graylog 界面的相關功能和對應特點!


來源:https://www.escapelife.site/posts/38c81b25.html
版權申明:內容來源網絡,版權歸原創(chuàng)者所有。除非無法確認,我們都會標明作者及出處,如有侵權煩請告知,我們會立即刪除并表示歉意。謝謝!




