graylog实现日志监控

这篇具有很好参考价值的文章主要介绍了graylog实现日志监控。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

graylog

graylog是一个轻量级的日志管理工具,依托elasticsearch作为日志存储中间件,MongoDB作为元数据信息存储中间件.自带WEB-UI界面,LDAP整合各种日志类型.提供了日志收集、日志查询、监控告警等相关功能。提供了graylog sidecar通过sidecar模式可以很方便的收集目标主机、容器的各种日志信息,无缝整合filebeat。搜索语法跟kibana类似,自带简单的监控告警功能提供了webhook email等方式。

部署

官方提供了docker docker-compose 手动部署等模式可供用户自行选择
本次采用docker部署

  1. graylog依赖了ES和MongoDB 需要提前将ES 和 MongoDB部署完成并且保持与graylog之间网络互通

  2. 生成**password_secret** 和 root_password_sha2

    #password 需要至少64位的随机数即可 如果有多个节点graylog需要保证password_secret是一致的
    pwgen -N 1 -s 96
    # root_password_sha2 作为WEB-UI 的管理员密码 默认用户名admin
    echo -n "Enter Password: " && head -1 </dev/stdin | tr -d '\n' | sha256sum | cut -d" " -f1
    
    
  3. 采用docker部署

    docker run
    -p 9000:9000 -p 12201:12201 -p 1514:1514 -p 5555:5555  -p 5044:5044
    -e GRAYLOG_HTTP_EXTERNAL_URI="http://127.0.0.1:9000/"
    -e GRAYLOG_IS_MASTER="true"
    -e GRAYLOG_PASSWORD_SECRET="填入上面生成的password_secret"
    -e GRAYLOG_ROOT_PASSWORD_SHA2="填入上面生成的root_password"
    -e GRAYLOG_ELASTICSEARCH_HOSTS="http://username:password@10.60.36.230:9200"
    -e GRAYLOG_MONGODB_URI="mongodb://10.60.36.230:27017/graylog"
    -e GRAYLOG_ROOT_TIMEZONE=Asia/Shanghai
    --name=graylog
    -d graylog/graylog:5.0
    
  4. 访问graylog WEB-UI localhost:9000 默认端口9000 输入用户名admin和上面设置的root_password密码的原文

    graylog实现日志监控

此上graylog-server部署完成

graylog sidecar

sidecar类似一个agent的模式作为日志的采集者发送数据给graylog-server也是官方比较推荐的一种日志收集方式

  1. 选择符合graylog-server版本的 sidecar https://go2docs.graylog.org/5-0/getting_in_log_data/graylog_sidecar.html?tocpath=Getting%20in%20Log%20Data%7CGraylog%20Sidecar%7C_____0

  2. 以windows为例 其他安装参考官方文档

  3. 通过WEB-UI 生成一个API token

    graylog实现日志监控

  4. 根据步骤逐步安装 修改graylog API的URL 和刚刚生成API token 还有实例名称(默认用hostname)

    graylog实现日志监控

  5. 如果上述配置错了可以再 C:\\Program Files\\Graylog\\sidecar\\sidecar.yml. 修改其中的配置重启

  6. 此时可以在WEB-UI看见sidecar

    graylog实现日志监控

  7. 添加INPUT BEAT数据源

    graylog实现日志监控

    graylog实现日志监控

  8. 配置sidecar的configuration抓取规则 选择collector收集器为filebeat 下方输入filebeat的抓取配置规则

    graylog实现日志监控

# Needed for Graylog
fields_under_root: true
fields.collector_node_id: ${sidecar.nodeName}
fields.gl2_source_collector: ${sidecar.nodeId}

output.logstash:
   hosts: ["localhost:5044"]
path:
  data: ${sidecar.spoolDir!"C:\\Program Files\\Graylog\\sidecar\\cache\\filebeat"}\data
  logs: ${sidecar.spoolDir!"C:\\Program Files\\Graylog\\sidecar"}\logs
tags:
 - windows
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - C:\Users\admin\Desktop\test_log\info/*.log
  multiline.pattern: '^20'                    #多行匹配规则
  multiline.negate: true                    #将不匹配的规则的行合并在一起
  multiline.match: after                #合并到匹配规则的上一行末尾
  tags: ["demo","info"]

- type: log
  enabled: true
  paths:
    - C:\Users\admin\Desktop\test_log\*-error-*.log
  multiline.pattern: '^20'                    #多行匹配规则
  multiline.negate: true                    #将不匹配的规则的行合并在一起
  multiline.match: after                #合并到匹配规则的上一行末尾
  tags: ["demo","error"]
 
  1. 下发filebeat的配置文件 Assign Configuration 并且执行 Process

    graylog实现日志监控

  2. 选择sidecar Show messages 查看日志

    graylog实现日志监控

    graylog实现日志监控

配置graylog 日志告警

  1. 选择顶部导航栏Alerts 选择 Notification 添加通知渠道

    graylog实现日志监控

  2. 选择添加一个web hook的通知渠道

    graylog实现日志监控

  3. 选择顶部导航栏Alerts 选择Event Definition 创建一个事件定义

    graylog实现日志监控

  4. 根据提示步骤 定义事件基础信息 描述 级别

graylog实现日志监控

  1. 配置filter 核心需要配置Search Query 规则 右侧可以返回Search Query返回的数据

    graylog实现日志监控

  2. 配置执行调度时间等规则

  3. 自定义字段如有需要的话

    graylog实现日志监控

  4. 选择之前配置的通知渠道 选择message backlog 会最终通知到webhook的backlog字段中 包含了消息原文信息 建议配置 grace period 配置安静期避免告警风暴

    graylog实现日志监控

  5. 查看配置概述 没问题选择Update event definition

    graylog实现日志监控

  6. 发送ERROR日志查看webhook接口的告警

    返回json报文示例文章来源地址https://www.toymoban.com/news/detail-416013.html

    {
        "event_definition_id": "643775ac247b2e0934262df5",
        "event_definition_type": "aggregation-v1",
        "event_definition_title": "demo-error-log-alert",
        "event_definition_description": "",
        "job_definition_id": "6437759a247b2e0934262dcd",
        "job_trigger_id": "6437bfc8247b2e093426c914",
        "event": {
            "id": "01GXWWA9QSVY0G89SMD94YB0W2",
            "event_definition_type": "aggregation-v1",
            "event_definition_id": "643775ac247b2e0934262df5",
            "origin_context": "urn:graylog:message:es:graylog_0:a5250950-d9d6-11ed-bcc0-0242ac110002",
            "timestamp": "2023-04-13T08:38:54.824Z",
            "timestamp_processing": "2023-04-13T08:39:36.441Z",
            "timerange_start": null,
            "timerange_end": null,
            "streams": [
                
            ],
            "source_streams": [
                "000000000000000000000001"
            ],
            "message": "demo-error-log-alert",
            "source": "1ac9b7a6d52e",
            "key_tuple": [
                
            ],
            "key": "",
            "priority": 3,
            "alert": true,
            "fields": {
                
            },
            "group_by_fields": {
                
            }
        },
        "backlog": [
            {
                "index": "graylog_0",
                "message": "2023-04-13 16:38:54.824 -- [demo1] -- ERROR 14996 --- [http-nio-4100-exec-5] [] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.ArithmeticException: / by zero] with root cause\n\njava.lang.ArithmeticException: / by zero\n\tat com.corn.controller.LogController.error(LogController.java:26)\n\tat sun.reflect.GeneratedMethodAccessor72.invoke(Unknown Source)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.lang.reflect.Method.invoke(Method.java:498)\n\tat org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)\n\tat org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)\n\tat org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n\tat org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)\n\tat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\n\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n\tat org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\n\tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n\tat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n\tat org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n\tat org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n\tat org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n\tat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)\n\tat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n\tat org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)\n\tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)\n\tat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n\tat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n\tat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360)\n\tat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n\tat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n\tat org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n\tat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1743)\n\tat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n\tat org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)\n\tat org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\n\tat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n\tat java.lang.Thread.run(Thread.java:748)",
                "fields": {
                    "filebeat_log_offset": 186267,
                    "filebeat_agent_name": "LAPTOP-1BQNQ8EO",
                    "gl2_remote_ip": "172.17.0.1",
                    "gl2_remote_port": 59776,
                    "filebeat_agent_hostname": "LAPTOP-1BQNQ8EO",
                    "beats_type": "filebeat",
                    "gl2_source_input": "64377490247b2e0934262b8e",
                    "filebeat_@metadata_beat": "filebeat",
                    "filebeat_@timestamp": "2023-04-13T08:38:54.824Z",
                    "filebeat_agent_type": "filebeat",
                    "filebeat_@metadata_version": "7.11.1",
                    "filebeat_host_name": "LAPTOP-1BQNQ8EO",
                    "gl2_source_node": "95acd4bd-4f23-40de-a422-5274f220a40a",
                    "filebeat_agent_version": "7.11.1",
                    "filebeat_agent_ephemeral_id": "d5392ef5-44f5-4d83-9007-1c947788c0f2",
                    "gl2_accounted_message_size": 5774,
                    "gl2_source_collector": "41e84e5f-67c5-422f-8fb0-a5205146cd4b",
                    "filebeat_input_type": "log",
                    "gl2_message_id": "01GXWW99K54AZYA4JCYQ0CT0ZG",
                    "filebeat_tags": [
                        "windows",
                        "demo",
                        "error"
                    ],
                    "filebeat_ecs_version": "1.6.0",
                    "filebeat_collector_node_id": "LAPTOP-1BQNQ8EO",
                    "filebeat_@metadata_type": "_doc",
                    "filebeat_log_time": "2023-04-13 16:38:54.824",
                    "filebeat_agent_id": "4b8086ce-67f1-4aec-b93b-723744d56ab3",
                    "filebeat_log_file_path": "C:\\Users\\JimWu\\Desktop\\test_log\\demo1-error-2023-04-13-0.log",
                    "filebeat_log_flags": [
                        "multiline"
                    ]
                },
                "id": "a5250950-d9d6-11ed-bcc0-0242ac110002",
                "source": "LAPTOP-1BQNQ8EO",
                "timestamp": "2023-04-13T08:38:54.824Z",
                "stream_ids": [
                    "000000000000000000000001"
                ]
            }
        ]
    }
    

到了这里,关于graylog实现日志监控的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一种轻量级日志采集解决方案

    前言 目前各大公司生产部署很多都是采用的集群+微服务的部署方式,如果让日志散落在各个主机上,查询起来会非常的困难,所以目前我了解到的都是采用的日志中心来统一收集管控日志,日志中心的实现方案大多基于ELK(即Elasticsearch、Logstash和Kibana三个开源软件的缩写),

    2024年02月07日
    浏览(108)
  • 『SEQ日志』在 .NET中快速集成轻量级的分布式日志平台

    📣读完这篇文章里你能收获到 如何在Docker中部署 SEQ:介绍了如何创建和运行 SEQ 容器,给出了详细的执行操作 如何使用 NLog 接入 .NET Core 应用程序的日志:详细介绍了 NLog 和 NLog.Seq 来配置和记录日志的步骤 日志记录示例:博客提供了一个简单的日志记录示例,展示了如何在

    2024年02月11日
    浏览(66)
  • 【架构】K8s中部署轻量级日志系统Loki

    Loki 是什么? Loki是由Grafana Labs开源的一个水平可扩展、高可用性,多租户的日志聚合系统的日志聚合系统。它的设计初衷是为了解决在大规模分布式系统中,处理海量日志的问题。Loki采用了分布式的架构,并且与Prometheus、Grafana密切集成,可以快速地处理大规模的日志数据。

    2024年02月20日
    浏览(61)
  • Kubernetes轻量级日志工具Loki安装及踩坑记录

    Loki是Grafana出品的一个轻量级日志系统,熟悉ELK的都知道ELK使用起来的成本,而且仅仅是日志检索使用ELK的话有点大材小用了。Loki8技术栈中使用了以下组件。 Promtail 用来将容器日志发送到 Loki 或者 Grafana 服务上的日志收集工具,该工具主要包括发现采集目标以及给日志流添

    2024年02月03日
    浏览(58)
  • 10 分钟在K8s 中部署轻量级日志系统 Loki

    转载至我的博客 https://www.infrastack.cn ,公众号:架构成长指南 Loki 是什么? Loki是由Grafana Labs开源的一个水平可扩展、高可用性,多租户的日志聚合系统的日志聚合系统。它的设计初衷是为了解决在大规模分布式系统中,处理海量日志的问题。Loki采用了分布式的架构,并且与

    2024年02月21日
    浏览(60)
  • 【Github】自动监测 SSL 证书过期的轻量级监控方案 - Domain Admin

    在现代的企业网络中,网站安全和可靠性是至关重要的。一个不注意的SSL证书过期可能导致网站出现问题,给公司业务带来严重的影响。针对这个问题,手动检测每个域名和机器的证书状态需要花费大量的时间和精力。为了解决这个问题,我想向大家介绍一个自动监测SSL证书

    2024年02月15日
    浏览(36)
  • CasaOS一个轻量级的家庭云系统

    简介 CasaOS是一款轻量级的家庭云系统,基于Docker安装部署,支持pc和手机,可玩性非常高,万物皆可以打成docker镜像后都可以安装。 你要你拥有一台电脑装上ubuntu你就能做all in one ,nas全家桶。安装简单,但是受网速影响至少要一个小时。 准备工作 一台装有docker的ubantu系统

    2024年02月05日
    浏览(66)
  • K8s部署轻量级日志收集系统EFK(elasticsearch + filebeat + kibana)

    目录 K8s部署EFK(elasticsear + filebeat + kibana)日志收集 一.准备镜像 二.搭建Elasticsearch + kibana 1.在可执行kubectl命令的服务器准备安装的yml文件 2.在elasticsearch-kibana目录下创建配置文件elasticsearch.yml 3.创建kibana配置文件kibana.yml 4.在k8s中创建elasticsearch和kibana的配置文件configmap 5.检查

    2024年02月08日
    浏览(65)
  • 【KRouter】一个简单且轻量级的Kotlin Routing框架

    KRouter(Kotlin-Router)是一个简单而轻量级的Kotlin路由框架。 具体来说,KRouter是一个通过URI来发现接口实现类的框架。它的使用方式如下: 之所以这样做,是因为在使用Voyager一段时间后,我发现模块之间的通信不够灵活,需要一些配置,而且使用DeepLink有点奇怪,所以我更喜

    2024年02月09日
    浏览(106)
  • golang一个轻量级基于内存的kv存储或缓存

    golang一个轻量级基于内存的kv存储或缓存 go-cache是一个轻量级的基于内存的key:value 储存组件,类似于memcached,适用于在单机上运行的应用程序。 它的主要优点是,本质上是一个具有过期时间的线程安全map[string]interface{}。interface的结构决定了它不需要序列化。基于内存的特性

    2024年02月02日
    浏览(73)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包