使用kibana可視化報表實時監控你的應用程序,從日誌中找出問題,解決問題

   先結果導向,來看我在kibana dashborad中製做的幾張監控圖。nginx

 

一:先睹爲快mongodb

dashboard1:監控幾個維度的日誌,這麼點日誌量是由於把無用的清理掉了,並且只接入了部分應用。ruby

          <1>  每日日誌總數。app

          <2>  每日日誌錯誤數,從log4net中level=ERROR摳出來的。elasticsearch

          <3>  每一個應用貢獻的日誌量(按照應用程序分組)性能

          <4>  今日錯誤日誌時間分佈折線圖。測試

          <5>  今日全量日誌時間分佈折線圖。spa

   

dashboard2:這個主要用來監控某日智能精準觸發的短信數和郵件數以及通道佔比狀況。debug

 

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: true
  paths:
    D:\Services\channel3\log\*.log
  exclude_lines: ['^----------','從新排隊,暫停 100。$']
  fields:
    appname: IntelligentMarketing.Service3
    ipnet: 10.153.204.199
    ippub: 121.41.176.41
  encoding: gbk
  multiline.pattern: ^(\s|[A-Z][a-z]|-)
  multiline.match: after


################## 2. IntelligentMarketing.Service4  ##################
- 
  enabled: true
  paths:
    D:\Services\channel4\log\*.log
  exclude_lines: ['^----------','從新排隊,暫停 100。$']
  fields:
    appname: IntelligentMarketing.Service4
    ipnet: 10.153.204.199
    ippub: 121.41.176.41
  encoding: gbk
  multiline.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;     #轉發到kibana
           proxy_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;  #容許的IP
           allow 118.133.47.76; #容許的IP
           deny all;
       }

 

4. 重啓nginx

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

 

而後綁定域名到你的ip以後,登錄就會有用戶名密碼驗證了。

 

好了,本篇就說這麼多,但願對你有幫助。

相關文章
相關標籤/搜索