服務日誌收集工具 Filebeat介紹可參考:ELK + Filebeat 搭建日誌系統html
Graylog 是一個開源的日誌聚合、分析、審計、展示和預警工具。在功能上來講,和 ELK 相似,但又比 ELK 要簡單不少。依靠着更加簡潔,高效,部署使用簡單的優點很快受到許多人的青睞。固然,在擴展性上面確實沒有比 ELK 好,可是其有商業版本能夠選擇。linux
部署 graylog 最簡單的架構就是單機部署,複雜的也是部署集羣模式,架構圖示以下所示。咱們能夠看到其中包含了三個組件,分別是 Elasticsearch、MongoDb 和 Graylog。其中,Elasticsearch 用來持久化存儲和檢索日誌文件數據(IO 密集),MongoDb 用來存儲關於 Graylog 的相關配置,而 Graylog 來提供 Web 界面和對外接口的(CPU 密集)。web
最小化單機部署redis
最優化集羣部署mongodb
配置 Graylog 服務的核心就是理解對應組件的功能以及其運做方式!docker
簡單來說,Input 表示日誌數據的來源,對不一樣來源的日誌能夠經過 Extractors 來進行日誌的字段轉換,好比將 Nginx 的狀態碼變成對應的英文表述等。而後,經過不一樣的標籤類型分組成不用的 Stream,並將這些日誌數據存儲到指定的 Index 庫中進行持久化保存。windows
Graylog 經過 Input 蒐集日誌,每一個 Input 單獨配置 Extractors 用來作字段轉換。Graylog 中日誌搜索的基本單位是 Stream,每一個 Stream 能夠有本身單獨的 Elastic Index Set,也能夠共享一個 Index Set。瀏覽器
Extractor 在 System/Input 中配置。Graylog 中很方便的一點就是能夠加載一條日誌,而後基於這個實際的例子進行配置並能直接看到結果。內置的 Extractor 基本能夠完成各類字段提取和轉換的任務,可是也有些限制,在應用裏寫日誌的時候就須要考慮到這些限制。Input 能夠配置多個 Extractors,按照順序依次執行。服務器
系統會有一個默認的 Stream,全部日誌默認都會保存到這個 Stream 中,除非匹配了某個 Stream,而且這個 Stream 裏配置了不保存日誌到默認 Stream。能夠經過菜單 Streams 建立更多的 Stream,新建立的 Stream 是暫停狀態,須要在配置完成後手動啓動。Stream 經過配置條件匹配日誌,知足條件的日誌添加 stream ID 標識字段並保存到對應的 Elastic Index Set 中。架構
Index Set 經過菜單 System/Indices 建立。日誌存儲的性能,可靠性和過時策略都經過 Index Set 來配置。性能和可靠性就是配置 Elastic Index 的一些參數,主要參數包括,Shards 和 Replicas。
除了上面提到的日誌處理流程,Graylog 還提供了 Pipeline 腳本實現更靈活的日誌處理方案。這裏不詳細闡述,只介紹若是使用 Pipelines 來過濾不須要的日誌。下面是丟棄 level > 6 的全部日誌的 Pipeline Rule 的例子。從數據採集(input),字段解析(extractor),分流到 stream,再到 pipeline 的清洗,一鼓作氣,無需在經過其餘方式進行二次加工。
Sidecar 是一個輕量級的日誌採集器,經過訪問 graylog 進行集中式管理,支持 linux 和 windows 系統。Sidecar 守護進程會按期訪問 graylog 的 REST API 接口獲取 Sidecar 配置文件中定義的標籤(tag) ,Sidecar 在首次運行時會從 graylog 服務器拉取配置文件中指定標籤(tag) 的配置信息同步到本地。目前 Sidecar 支持 NXLog,Filebeat 和 Winlogbeat。他們都經過 graylog 中的 web 界面進行統一配置,支持 Beats、CEF、Gelf、Json API、NetFlow 等輸出類型。Graylog 最厲害的在於能夠在配置文件中指定 Sidecar 把日誌發送到哪一個 graylog 羣集,並對 graylog 羣集中的多個 input 進行負載均衡,這樣在遇到日誌量很是龐大的時候,graylog 也能應付自如。
rule "discard debug messages" when to_long($message.level) > 6 then drop_message(); end
日誌集中保存到 Graylog 後就能夠方便的使用搜索了。不過有時候仍是須要對數據進行近一步的處理。主要有兩個途徑,分別是直接訪問 Elastic 中保存的數據,或者經過 Graylog 的 Output 轉發到其它服務。
主要介紹部署 Filebeat + Graylog 的安裝步驟和注意事項!
官方提供了多種的部署方式,包括經過 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 容器來部署服務,若是你須要使用其餘方式來部署的話,請自行查看官方文檔對應章節的安裝部署步驟。在服務部署以前,咱們須要給 Graylog 服務生成等相關信息,生成部署以下所示:
# 生成password_secret密碼(最少16位) $ sudo apt install -y pwgen $ pwgen -N 1 -s 16 zscMb65...FxR9ag # 生成後續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 下面建立對應的 input 以後,啓動容器時候指定 log-driver,就能夠將容器內的輸出都會發送到 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 界面的相關功能和對應特色!
做者: Escape 連接: https://www.escapelife.site/p...