使用kibana可视化报表实时监控你的应用程序

先结果导向,来看我在kibana dashborad中制作的几张监控图。

一:先睹为快

1. dashboard1

监控几个维度的日志,这么点日志量是因为把无用的清理掉了,而且只接入了部分应用。

  • 每日日志总数。

  • 每日日志错误数,从log4net中level=ERROR抠出来的。

  • 每个应用贡献的日志量(按照应用程序分组)

  • 今日错误日志时间分布折线图。

  • 今日全量日志时间分布折线图。

2. dashboard2

这个主要用来监控某日智能精准触发的短信数和邮件数以及通道占比情况。

3. dashboard3

某日发送的营销活动概况,一目了然。

二:采集注意事项

接下来我们聊聊这个流程中注意的问题。

1. 使用fileBeat 清洗掉垃圾日志

  采集端使用的是filebeat,一个应用程序配置一个prospectors探测器。

#=========================== Filebeat prospectors =============================filebeat.prospectors:# Each - is a prospector. Most options can be set at the prospector level, so
# you can use different prospectors for various configurations.
# Below are the prospector specific configurations.################## 1. IntelligentMarketing.Service3  ##################
- enabled: truepaths:D:\Services\channel3\log\*.logexclude_lines: ['^----------','重新排队,暂停 100。$']fields:appname: IntelligentMarketing.Service3ipnet: 10.153.204.199ippub: 121.41.176.41encoding: gbkmultiline.pattern: ^(\s|[A-Z][a-z]|-)multiline.match: after################## 2. IntelligentMarketing.Service4  ##################
- enabled: truepaths:D:\Services\channel4\log\*.logexclude_lines: ['^----------','重新排队,暂停 100。$']fields:appname: IntelligentMarketing.Service4ipnet: 10.153.204.199ippub: 121.41.176.41encoding: gbkmultiline.pattern: ^(\s|[A-Z][a-z]|-)multiline.match: after

<1> exclude_lines

这个用来过滤掉我指定的垃圾日志,比如说以 ----------- 开头的 和 “重新排队,暂停100。”结尾的日志,反正正则怎么用,这里就怎么配吧,有一点注意,尽量不要配置 contain模式的正则,比如:'.暂未获取到任何mongodb记录.' 这样会导致filebeat cpu爆高。

<2> fields

这个用于配置应用程序专属的一些信息,比如我配置了appname,内网ip,外网ip,方便做后期的日志检索,检索出来就是下面这样子。

<3> multiline

有时候应用程序会抛异常,就存在着如何合并多行信息的问题,我这里做的配置就是如果当前行是以‘空格’,‘字母‘ 和 ‘-’开头的,那么就直接合并到上一行,比如下面这个Mongodb的FindALL异常堆栈。

2. logstash解析日志

主要还是使用 grok 正则,比如下面这条日志,我需要提取出‘date’,‘threadID’,和 “ERROR” 这三个重要信息。

2017-11-13 00:00:36,904 [65] ERROR [xxx.Monitor.Worker:83] Tick [(null)] - 这是一些测试数据。。

那么就可以使用如下的grok模式。

match => { "message" => "%{TIMESTAMP_ISO8601:logdate} \[%{NUMBER:threadId}\] %{LOGLEVEL:level}"}

上面这段话的意思就是:提取出的时间给logdate,65给threadId,ERROR给level,然后整个内容整体给默认的message字段,下面是完整的logstash.yml。


input {beats {port => 5044}
}filter {grok {match => { "message" => "%{TIMESTAMP_ISO8601:logdate} \[%{NUMBER:threadId}\] %{LOGLEVEL:level}"}}if ([message] =~ "^----------") {drop {}}date {match => ["logdate", "yyyy-MM-dd HH:mm:ss,SSS"]# target => "@timestamp"timezone => "Asia/Shanghai"}ruby {code => "event.timestamp.time.localtime"}
}output {stdout {codec => rubydebug { }}elasticsearch {hosts => "10.132.166.225"index => "log-%{+YYYY.MM.dd}"}}

三:kibana制作

1. 今日全量日志吞吐走势图

这个比较简单。因为本质上是一个聚合计算,aggreration按照 Date Histogram聚合即可。

2. 今日错误日志走势图

这个相当于在上面那个按时间聚合分组之后,然后在每一个bucket中再做一个 having level=‘ERROR’的筛选即可。

3. 今日普通营销活动发送

这个就是在bucket桶中做了一个 having message like '%【第四步】 leaflet发送成功%' ,为什么这么写是因为只要发送成功,我都会追加这么一条日志,所以大概就是这么个样子,性能上大家应该也知道,对吧。

4. 今日应用程序日志吞吐量

这个不想上面那三张图按照时间聚合,而是按照appname 聚合就可以了,还记得我在filebeat的fileld中添加的appname字段吗?

四:使用nginx给kibana做权限验证

为了避开x-pack 的复杂性,大家可以使用nginx给kibana做权限验证。

1. 安装 yum install -y httpd-tools。

2. 设置用户名和密码:admin abcdefg

htpasswd -bc /data/myapp/nginx/conf/htpasswd.users damin  abcdefg

3. 修改nginx的配置


server {listen       80;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;auth_basic "Restricted Access";auth_basic_user_file /data/myapp/nginx/conf/htpasswd.users;      #登录验证location / {proxy_pass http://10.122.166.225:5601;     #转发到kibanaproxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection 'upgrade';proxy_set_header Host $host;proxy_cache_bypass $http_upgrade;allow 222.68.71.185;  #允许的IPallow 118.133.47.76; #允许的IPdeny all;}

4. 重启nginx

[root@localhost conf]# /data/myapp/nginx/sbin/nginx -s reload

然后绑定域名到你的ip之后,登陆就会有用户名密码验证了。

好了,本篇就说这么多,希望对你有帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/308932.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[EDA]Quartus II 实验简答题

1&#xff0e;使用 Quartus 编辑波形文件时&#xff0c;界面如下图所示&#xff0c;图中用方框标注的区域&#xff0c;名称是什么&#xff1f;在图中&#xff0c;A、B是输入端口&#xff0c;S是输出端口&#xff0c;要编辑的是哪些信号&#xff1f;为什么。 1&#xff0e;方框标…

基于.NetCore3.1搭建项目系列 —— 使用Swagger导出文档 (补充篇)

前言在上一篇导出文档番外篇中&#xff0c;我们已经熟悉了怎样根据json数据导出word的文档&#xff0c;生成接口文档&#xff0c;而在这一篇&#xff0c;将对上一篇进行完善补充&#xff0c;增加多种导出方式&#xff0c;实现更加完善的导出功能。回顾1. 获取Swagger接口文档的…

[EDA] 给出一个双进程状态机,请把它改为单进程状态机。

给出一个双进程状态机&#xff0c;请把它改为单进程状态机。 解答&#xff1a;

[EDA] 给出一个状态机,请把它的组合进程分为2个,分别命名为COM1和COM2,其中:COM1实现对外的控制信号输出,COM2实现状态译码。

给出一个状态机&#xff0c;请把它的组合进程分为2个&#xff0c;分别命名为COM1和COM2&#xff0c;其中&#xff1a;COM1实现对外的控制信号输出&#xff0c;COM2实现状态译码。 解答&#xff1a;

基于.NetCore3.1搭建项目系列 —— 使用Swagger导出文档 (番外篇)

前言回顾之前的两篇Swagger做Api接口文档&#xff0c;我们大体上学会了如何在net core3.1的项目基础上&#xff0c;搭建一套自动生产API接口说明文档的框架。本来在Swagger的基础上&#xff0c;前后端开发人员在开发生产期间&#xff0c;可以借此进行更加便捷的沟通交流。可是总…

遵守这些原则让你开发效率提高一倍

一、概述在园子里面有很多关于各种技术细节的研究文章&#xff0c;都是比较牛逼的框架研究&#xff1b;但是一直没有看到关于怎么样提高开发效率的文章&#xff0c;大多提高开发效率的文章都是关于自动化等方面的辅助工具类型的&#xff0c;而不是开发中的一些小技巧&#xff1…

【复杂系统迁移 .NET Core平台系列】之调度服务改造

源宝导读&#xff1a;微软跨平台技术框架—.NET Core已经日趋成熟&#xff0c;已经具备了支撑大型系统稳定运行的条件。本文将介绍明源云ERP平台从.NET Framework向.NET Core迁移过程中的实践经验。一、背景随着ERP的产品线越来越多&#xff0c;业务关联也日益复杂&#xff0c;…

C++实现AOE网中的关键路径算法及机动时间计算算法(邻接表存储)

代码如下: #include <iostream> #include <stack> using namespace std; const int N 100;typedef struct Node {int adj;int w;Node *next;}Node;typedef struct VNode {int in;int v;Node *first;VNode(){first nullptr;} }VNode;class AOE { private:VNode a…

.NET 开源项目 StreamJsonRpc 介绍[中篇]

阅读本文大概需要 11 分钟。上一篇介绍了一些预备知识&#xff0c;包括 JSON-RPC 介绍和实现了 JSON-RPC 的 StreamJsonRpc 介绍&#xff0c;讲到了 StreamJsonRpc 可以通过 .NET 的 Stream 类和 WebSocket 类实现 JSON-RPC 协议的通信。本篇就先选择其中的 Stream 类来讲解&am…

Istio 中的多集群部署与管理

本文节选自ServiceMesher 社区出品的开源电子书《Istio Handbook——Istio 服务网格进阶实战》&#xff0c;作者钟华&#xff0c;来自腾讯云。Istio 在 1.1 后提供了两类多集群的连通的部署模式&#xff1a;1. 多控制面2. 单控制面&#xff0c;也称为 “共享控制面” 模式多控制…

认证授权方案之授权初识

1.前言回顾&#xff1a;认证授权方案之JwtBearer认证在上一篇中&#xff0c;我们通过JwtBearer的方式认证&#xff0c;了解在认证时&#xff0c;都是基于Claim的&#xff0c;因此我们可以通过用户令牌获取到用户的Claims&#xff0c;在授权过程中对这些Claims进行验证&#xff…

[数据结构]树、森林与二叉树之间的相互转换方法

树、二叉树与森林的相互转换 本文只给出树、森林与二叉树之间的转换方法&#xff0c;而详细的证明过程不在本文讨论范围之内。 树 → 二叉树 在所有兄弟结点之间加一连线。 对每个结点&#xff0c;除了保留与其长子的连线外&#xff0c;去掉该结点与其它孩子的连线。 二叉树 …

Blazor.Server以正确的方式集成Ids4

&#xff08;一个真正的以后端形式来集成认证中心的方案&#xff09;❤本文导读首先特别感谢张善友老师提供技术指导&#xff0c;源于上周我发了一篇文章《[Mvp.Blazor] 集成Ids4&#xff0c;实现统一授权认证》&#xff0c;我本来是想通过像vue框架那样&#xff0c;通过引oidc…

作为一个有理想的程序员,必读的书都有哪些?

很多程序员朋友问我&#xff1a;“哪本最具影响力的书&#xff0c;是每个程序员都应该读的&#xff1f;” 笔者从事软件开发15年&#xff0c;看过的计算机相关的书籍不下百本了&#xff0c;如果非要推荐的话&#xff0c;给大家精选以下10本&#xff0c;希望对大家有所帮助&…

认证授权方案之JwtBearer认证

1.前言回顾&#xff1a;认证方案之初步认识JWT在现代Web应用程序中&#xff0c;即分为前端与后端两大部分。当前前后端的趋势日益剧增&#xff0c;前端设备&#xff08;手机、平板、电脑、及其他设备&#xff09;层出不穷。因此&#xff0c;为了方便满足前端设备与后端进行通讯…

使用过滤器模式,让客户关怀中的代码更加干净整洁

一&#xff1a;实际场景介绍我们在给用户做订单催付通知的时候&#xff0c;会有这样的一种场景&#xff0c;用户在系统后台设置一组可以催付的规则&#xff0c;比如说订单金额大于xx元&#xff0c;非黑名单用户&#xff0c;来自哪个地区&#xff0c;已购买过某个商品&#xff0…

C++实现各种排序以及复杂度,稳定性分析

代码如下: #include<iostream> using namespace std;void Bubble_Sort(int *a, int n) {bool flag;int tmp 0;for (int i n - 1; i > 0; i--){flag false;for (int j 0; j < i; j){if (a[j] > a[j 1]){swap(a[j], a[j 1]);flag true;}}if (!flag) break…