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

一:先睹为快

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

<1>  每日日志总数。

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

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

<4>  今日错误日志时间分布折线图。

<5>  今日全量日志时间分布折线图。

   

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

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

        

二:采集注意事项

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

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

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

  1. #=========================== Filebeat prospectors =============================
  2.  
  3. filebeat.prospectors:
  4.  
  5. # Each - is a prospector. Most options can be set at the prospector level, so
  6. # you can use different prospectors for various configurations.
  7. # Below are the prospector specific configurations.
  8.  
  9. ################## 1. IntelligentMarketing.Service3 ##################
  10. -
  11. enabled: true
  12. paths:
  13. D:\Services\channel3\log\*.log
  14. exclude_lines: ['^----------','重新排队,暂停 100。$']
  15. fields:
  16. appname: IntelligentMarketing.Service3
  17. ipnet: 10.153.204.199
  18. ippub: 121.41.176.41
  19. encoding: gbk
  20. multiline.pattern: ^(\s|[A-Z][a-z]|-)
  21. multiline.match: after
  22.  
  23. ################## 2. IntelligentMarketing.Service4 ##################
  24. -
  25. enabled: true
  26. paths:
  27. D:\Services\channel4\log\*.log
  28. exclude_lines: ['^----------','重新排队,暂停 100。$']
  29. fields:
  30. appname: IntelligentMarketing.Service4
  31. ipnet: 10.153.204.199
  32. ippub: 121.41.176.41
  33. encoding: gbk
  34. multiline.pattern: ^(\s|[A-Z][a-z]|-)
  35. 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” 这三个重要信息。

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

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

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

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

  1. input {
  2. beats {
  3. port => 5044
  4. }
  5. }
  6.  
  7. filter {
  8. grok {
  9. match => { "message" => "%{TIMESTAMP_ISO8601:logdate} \[%{NUMBER:threadId}\] %{LOGLEVEL:level}"}
  10. }
  11. if ([message] =~ "^----------") {
  12. drop {}
  13. }
  14. date {
  15. match => ["logdate", "yyyy-MM-dd HH:mm:ss,SSS"]
  16. # target => "@timestamp"
  17. timezone => "Asia/Shanghai"
  18. }
  19. ruby {
  20. code => "event.timestamp.time.localtime"
  21. }
  22. }
  23.  
  24. output {
  25. stdout {
  26. codec => rubydebug { }
  27. }
  28.  
  29. elasticsearch {
  30. hosts => "10.132.166.225"
  31. index => "log-%{+YYYY.MM.dd}"
  32. }
  33.  
  34. }       

三: 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

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

3. 修改nginx的配置。

  1. server {
  2. listen 80;
  3. server_name localhost;
  4.  
  5. #charset koi8-r;
  6. #access_log logs/host.access.log main;
  7.  
  8. auth_basic "Restricted Access";
  9. auth_basic_user_file /data/myapp/nginx/conf/htpasswd.users; #登录验证
  10. location / {
  11.  
  12. proxy_pass http://10.122.166.225:5601; #转发到kibana
  13. proxy_http_version 1.1;
  14. proxy_set_header Upgrade $http_upgrade;
  15. proxy_set_header Connection 'upgrade';
  16. proxy_set_header Host $host;
  17. proxy_cache_bypass $http_upgrade;
  18. allow 222.68.71.185; #允许的IP
  19. allow 118.133.47.76; #允许的IP
  20. deny all;
  21. }

4. 重启nginx

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

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

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

使用kibana可视化报表实时监控你的应用程序,从日志中找出问题,解决问题的更多相关文章

  1. Nginx系列4:用GoAccess实现可视化并实时监控access日志

    1.ubuntu16.04安装GoAccess GoAccess下载地址:https://goaccess.io/download 安装步骤: $ wget https://tar.goaccess. ...

  2. 用goaccess实现可视化并实时监控access日志

    goaccess access.log -o ../html/report.html --real-time-html time-format='%H:%M:%S' --date-format=‘%d ...

  3. 数据可视化之powerBI技巧(五)在Power BI中写出优雅的度量值是什么体验?

    之前的文章(采悟:连接表的几个DAX函数,一次全掌握)介绍了产品A的客户与产品B的客户的各种交叉关系,其中最常用的应该是找出A和B的共同客户,以便进行产品关联分析. 之前的思路是计算出两个产品的共同客 ...

  4. 虎牙数万主播同时在线直播的秘密,CDN推流日志上行实时监控

    6 月 10 日,又拍云 Open Talk | 2018 音视频技术沙龙·深圳站 顺利落幕,来自虎牙的直播运维研发架构师张波在沙龙上做了<基于CDN推流日志的主播上行实时监控及其自动化解密&g ...

  5. 性能工具之JMeter+InfluxDB+Grafana打造压测可视化实时监控【转】

    概述 本文我们将介绍如何使用JMeter+InfluxDB+Grafana打造压测可视化实时监控. 引言 我们很多时候在使用JMeter做性能测试,我们很难及时察看压测过程中应用的性能状况,总是需要等 ...

  6. 转: 透过CAT,来看分布式实时监控系统的设计与实现

    评注: 开源的分布式监控系统 转:http://www.infoq.com/cn/articles/distributed-real-time-monitoring-and-control-syste ...

  7. 透过CAT,来看分布式实时监控系统的设计与实现

    2011年底,我加入大众点评网,出于很偶然的机会,决定开发CAT,为各个业务线打造分布式实时监控系统,CAT的核心概念源自eBay闭源系统CAL----eBay的几大法宝之一. 在当今互联网时代,业务 ...

  8. fluentd结合kibana、elasticsearch实时搜索分析hadoop集群日志<转>

    转自 http://blog.csdn.net/jiedushi/article/details/12003171 Fluentd是一个开源收集事件和日志系统,它目前提供150+扩展插件让你存储大数据 ...

  9. 如何做实时监控?—— 参考 Spring Boot 实现

    随着 微服务 的流行,相比较以前一个大型应用程序搞定所有需求,我们现在更倾向于把大型应用程序切分成多个微服务,服务之间通过 RPC 调用.微服务架构的好处非常多,例如稳定的服务变化较少,不会被非稳定服 ...

随机推荐

  1. java解析xml字符串方法

    一,用DOM4J  针对无重复标签的xml字符串格式,如下: 针对此种情况可用DOM4J解析法,引入 dom4j的相关jar包代码如下: Document document=DocumentHelpe ...

  2. STL-Map 源码剖析

    G++ ,cygnus\cygwin-b20\include\g++\stl_map.h 完整列表 /* * * Copyright (c) 1994 * Hewlett-Packard Compan ...

  3. git merge与 git rebase区别及实例

    接Git分支创建与合并,在分支合并时,有两种方式:git merge 和git rebase. git merge:将两个分支,合并提交为一个新提交,并且新提交有2个parent. git rebas ...

  4. QTP自动化测试流程

    1)准备TestCase        - 在进行自动化之前,将测试内容进行文档化,不建议直接录制脚本        - 在录制脚本之前设计好脚本,便于录制过程的流畅        - 由于测试用例设 ...

  5. MyBatis xml配置文件详解

    http://blog.csdn.net/fenghuibian/article/details/52525671

  6. BufferedInputStream与BufferedOutputStream用法简介

    BufferedInputStream是带缓冲区的输入流,默认缓冲区大小是8M,能够减少访问磁盘的次数,提高文件读取性能:BufferedOutputStream是带缓冲区的输出流,能够提高文件的写入 ...

  7. Java中 float、double使用注意问题

    在java中运行一下代码 System.out.println(2.00-1.10);输出的结果是:0.8999999999999999很奇怪,并不是我们想要的值0.9 再运行如下代码:System. ...

  8. Unity文档阅读 第一章 入门

    Before you learn about dependency injection and Unity, you need to understand why you should use the ...

  9. 关于Linux虚拟化技术KVM的科普 科普四(From humjb_1983)

    另一组关于KVM的分析文档,虚拟化相关概念.KVM基本原理和架构一-概念和术语.KVM基本原理和架构二-基本原理.KVM基本原理及架构三-CPU虚拟化.KVM基本原理及架构四-内存虚拟化.KVM基本原 ...

  10. Java 精简Jre jar打包成exe

    #开始 最近几天都在忙一个事情,那就是尝试精简jre,我想不明白为什么甲骨文官方不出exe打包工具... 网络上精简jre的文章很多,但是原创的似乎没几个,绝大多数都是转发同一个博客, 这里借鉴了不少 ...