日志收集笔记(Kibana,Watcher)

1 Kibana

Kibana 是一个开源的分析与可视化平台,可以用 Kibana 搜索、查看存放在 Elasticsearch 中的数据,就跟谷歌的 elasticsearch head 插件类似,但 Kibana 与 Elasticsearch 的交互方式是各种不同的图表、表格、地图等,直观的展示数据,从而达到高级的数据分析与可视化的目的。
Elasticsearch、Logstash 和 Kibana 这三个技术就是常说的 ELK 技术栈,很典型的 MVC 思想,模型持久层,视图层和控制层。Logstash 担任控制层的角色,负责搜集和过滤数据。Elasticsearch担任数据持久层的角色,负责储存数据。而 Kibana 担任视图层角色,拥有各种维度的查询和分析,并使用图形化的界面展示存放在 Elasticsearch 中的数据。

1.1 Kibana 的安装与使用

官网 下载与对应 Elasticsearch 一致的版本,并解压,修改存放在 config 目录下核心配置文件 kibana.yml,该文件所有的配置都是注释掉的,说明所有的配置都是使用默认的。
其中比较重点的配置如下

  • server.port:服务的端口配置,默认是 5601
  • server.host:允许远程访问的地址配置,默认为本机,如果需要把 Kibana 服务给远程主机访问,只需要在这个配置中填写远程的那台主机的 ip 地址,那如果希望所有的远程主机都能访问,那就填写 0.0.0.0
  • elasticsearch.url:连接 Elasticsearch 服务配置,默认为连接到本机的 Elasticsearch,并且端口为 9200,即 localhost:9200
  • elasticsearch.usernameelasticsearch.password: Elasticsearch的用户名和密码,默认是没有用户名和密码

使用以下命令运行 Kibana:

/usr/local/kibana-6.4.3/bin/kibana

Kibana默认的端口是 5601,防火墙打开 5601 的端口后,在浏览器访问 ip:5601 就可以访问到 Kibana 了。

如下图添加 Index Patterns
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
创建好之后,回到 Discovery 就可以看到对应的视图了,同时还可以自定义添加筛选条件查看数据。
在这里插入图片描述

2 Watcher

Elasticsearch 提供了数据的存储及快速的搜索,而其中的 Watcher 功能可以实时地根据一些条件来发送警报。与 Elasticsearch 的使用一样,可以通过 Resfulapi 调用创建、管理、更新预警任务。

  • 查看 watcher 插件是否正常运行,返回含有 "watcher_state": "started" 则表示正常运行
GET /_cluster/health

配置一个 Watcher,我们必须配置如下的几个:

PUT _watcher/watch/log_error_watch
{
  "trigger": {},
  "input": {},
  "condition": {},
  "transform" {},
  "actions": {}
}

即一个 Watcher 由五个部分组成:

  • trigger 定义多长时间 watcher 运行一次
  • input 获取评估的数据
  • condition 评估你加载到 watch 中的数据并确定是否需要任何操作,比如已经将日志 error 加载到 watch 中,你可以定义一个条件来检查是否发现了某个特定的 error
  • actions 操作,watch 的操作定义了当 watch 条件评估为真时要做什么
PUT _xpack/watcher/watch/error_log_collector_watcher
{
  ## 定义5秒触发一次监听
  "trigger": {
    "schedule": {
      "interval": "5s"
    }
  },
  "input": {
    "search": {
      "request": {
        "indices": ["<error_log_collector-{now+8h/d}>"], ## 监听的 Elasticsearch 索引
        "body": {
          "size": 0, ## 表示不查数据,不返回全部数据,只返回命中数
          "query": {
            "bool": {
              "must": [
                  {
                    "term": {"level": "ERROR"} ## 匹配条件,日志级别为 error 
                  }
              ],
              "filter": {
                "range": {
                    "currentDateTime": {
                    "gt": "now-30s" , "lt": "now" ## 筛选条件,currentDateTime 在 30 秒内
                  }
                }
              } 
            }
          }
        }
      }
    }
  },
  ## 如果上面查询返回的命中数大于 0
  "condition": {
    "compare": {
      "ctx.payload.hits.total": {
        "gt": 0
      }
    }
  },
  ## 数据转化,真正把数据查询出来
  "transform": {
    "search": {
      "request": {
        "indices": ["<error-log-collector-{now+8h/d}>"],
        "body": {
          "size": 1, ## 只返回一条
          "query": {
            "bool": {
              "must": [
                  {
                    "term": {"level": "ERROR"}
                  }
              ],
              "filter": {
                "range": {
                    "currentDateTime": {
                    "gt": "now-30s" , "lt": "now"
                  }
                }
              } 
            }
          },
          "sort": [
            {
                "currentDateTime": {
                    "order": "desc"
                }
            }
          ]
        }
      }
    }
  },
  ## 满足 condition 条件后操作
  "actions": {
    "test_error": {
      ## 将错误信息发送到自定义的 api
      "webhook" : {
        "method" : "POST",
        "url" : "http://192.168.212.128:8088/logCollector/accurateWatch",
        "body" : "{"title": "异常错误告警", "applicationName": "{{#ctx.payload.hits.hits}}{{_source.applicationName}}{{/ctx.payload.hits.hits}}", "level":"告警级别P1", "body": "{{#ctx.payload.hits.hits}}{{_source.messageInfo}}{{/ctx.payload.hits.hits}}", "executionTime": "{{#ctx.payload.hits.hits}}{{_source.currentDateTime}}{{/ctx.payload.hits.hits}}"}"
      }
    }
 }
}

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇

)">
下一篇>>