服务日志收集工具 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...