关于linux:比-ELK-更简洁高效企业级日志平台后起之秀-Graylog

3次阅读

共计 5175 个字符,预计需要花费 13 分钟才能阅读完成。

服务日志收集工具 Filebeat 介绍可参考:ELK + Filebeat 搭建日志零碎

Graylog 服务介绍

Graylog – 日志监控零碎

Graylog 是一个开源的日志聚合、剖析、审计、展示和预警工具。在性能上来说,和 ELK 相似,但又比 ELK 要简略很多。依附着更加简洁,高效,部署应用简略的劣势很快受到许多人的青眼。当然,在扩展性下面的确没有比 ELK 好,然而其有商业版本能够抉择。

Graylog – 工作流程介绍

部署 graylog 最简略的架构就是单机部署,简单的也是部署集群模式,架构图示如下所示。咱们能够看到其中蕴含了三个组件,别离是 Elasticsearch、MongoDb 和 Graylog。其中,Elasticsearch 用来长久化存储和检索日志文件数据(IO 密集),MongoDb 用来存储对于 Graylog 的相干配置,而 Graylog 来提供 Web 界面和对外接口的(CPU 密集)。


最小化单机部署


最优化集群部署

Graylog 组件性能

配置 Graylog 服务的外围就是了解对应组件的性能以及其运作形式!

简略来讲,Input 示意日志数据的起源,对不同起源的日志能够通过 Extractors 来进行日志的字段转换,比方将 Nginx 的状态码变成对应的英文表述等。而后,通过不同的标签类型分组成不必的 Stream,并将这些日志数据存储到指定的 Index 库中进行长久化保留。

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 的装置步骤和注意事项!

部署 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 容器来部署服务,如果你须要应用其余形式来部署的话,请自行查看官网文档对应章节的装置部署步骤。在服务部署之前,咱们须要给 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 界面性能

次要介绍 Graylog 界面的相干性能和对应特点!

作者: Escape 链接: https://www.escapelife.site/p…

正文完
 0