使用kibana可视化报表实时监控你的应用程序
先結(jié)果導(dǎo)向,來(lái)看我在kibana dashborad中制作的幾張監(jiān)控圖。
一:先睹為快
1. dashboard1
監(jiān)控幾個(gè)維度的日志,這么點(diǎn)日志量是因?yàn)榘褵o(wú)用的清理掉了,而且只接入了部分應(yīng)用。
每日日志總數(shù)。
每日日志錯(cuò)誤數(shù),從log4net中l(wèi)evel=ERROR摳出來(lái)的。
每個(gè)應(yīng)用貢獻(xiàn)的日志量(按照應(yīng)用程序分組)
今日錯(cuò)誤日志時(shí)間分布折線圖。
今日全量日志時(shí)間分布折線圖。
2. dashboard2
這個(gè)主要用來(lái)監(jiān)控某日智能精準(zhǔn)觸發(fā)的短信數(shù)和郵件數(shù)以及通道占比情況。
3. dashboard3
某日發(fā)送的營(yíng)銷(xiāo)活動(dòng)概況,一目了然。
二:采集注意事項(xiàng)
接下來(lái)我們聊聊這個(gè)流程中注意的問(wèn)題。
1. 使用fileBeat 清洗掉垃圾日志
采集端使用的是filebeat,一個(gè)應(yīng)用程序配置一個(gè)prospectors探測(cè)器。 #=========================== 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: ['^----------','重新排隊(duì),暫停 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: ['^----------','重新排隊(duì),暫停 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
這個(gè)用來(lái)過(guò)濾掉我指定的垃圾日志,比如說(shuō)以 ----------- 開(kāi)頭的 和 “重新排隊(duì),暫停100?!苯Y(jié)尾的日志,反正正則怎么用,這里就怎么配吧,有一點(diǎn)注意,盡量不要配置 contain模式的正則,比如:'.暫未獲取到任何mongodb記錄.' 這樣會(huì)導(dǎo)致filebeat cpu爆高。
<2> fields
這個(gè)用于配置應(yīng)用程序?qū)俚囊恍┬畔?#xff0c;比如我配置了appname,內(nèi)網(wǎng)ip,外網(wǎng)ip,方便做后期的日志檢索,檢索出來(lái)就是下面這樣子。
<3> multiline
有時(shí)候應(yīng)用程序會(huì)拋異常,就存在著如何合并多行信息的問(wèn)題,我這里做的配置就是如果當(dāng)前行是以‘空格’,‘字母‘ 和 ‘-’開(kāi)頭的,那么就直接合并到上一行,比如下面這個(gè)Mongodb的FindALL異常堆棧。
2. logstash解析日志
主要還是使用 grok 正則,比如下面這條日志,我需要提取出‘date’,‘threadID’,和 “ERROR” 這三個(gè)重要信息。
2017-11-13 00:00:36,904 [65] ERROR [xxx.Monitor.Worker:83] Tick [(null)] - 這是一些測(cè)試數(shù)據(jù)。。那么就可以使用如下的grok模式。
match => { "message" => "%{TIMESTAMP_ISO8601:logdate} \[%{NUMBER:threadId}\] %{LOGLEVEL:level}"}上面這段話(huà)的意思就是:提取出的時(shí)間給logdate,65給threadId,ERROR給level,然后整個(gè)內(nèi)容整體給默認(rèn)的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. 今日全量日志吞吐走勢(shì)圖
這個(gè)比較簡(jiǎn)單。因?yàn)楸举|(zhì)上是一個(gè)聚合計(jì)算,aggreration按照 Date Histogram聚合即可。
2. 今日錯(cuò)誤日志走勢(shì)圖
這個(gè)相當(dāng)于在上面那個(gè)按時(shí)間聚合分組之后,然后在每一個(gè)bucket中再做一個(gè) having level=‘ERROR’的篩選即可。
3. 今日普通營(yíng)銷(xiāo)活動(dòng)發(fā)送
這個(gè)就是在bucket桶中做了一個(gè) having message like '%【第四步】 leaflet發(fā)送成功%' ,為什么這么寫(xiě)是因?yàn)橹灰l(fā)送成功,我都會(huì)追加這么一條日志,所以大概就是這么個(gè)樣子,性能上大家應(yīng)該也知道,對(duì)吧。
4. 今日應(yīng)用程序日志吞吐量
這個(gè)不想上面那三張圖按照時(shí)間聚合,而是按照appname 聚合就可以了,還記得我在filebeat的fileld中添加的appname字段嗎?
四:使用nginx給kibana做權(quán)限驗(yàn)證
為了避開(kāi)x-pack 的復(fù)雜性,大家可以使用nginx給kibana做權(quán)限驗(yàn)證。
1. 安裝 yum install -y httpd-tools。
2. 設(shè)置用戶(hù)名和密碼:admin abcdefg
htpasswd -bc /data/myapp/nginx/conf/htpasswd.users damin abcdefg3. 修改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; #登錄驗(yàn)證location / {proxy_pass http://10.122.166.225:5601; #轉(zhuǎn)發(fā)到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之后,登陸就會(huì)有用戶(hù)名密碼驗(yàn)證了。
好了,本篇就說(shuō)這么多,希望對(duì)你有幫助。
總結(jié)
以上是生活随笔為你收集整理的使用kibana可视化报表实时监控你的应用程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 基于.NetCore3.1搭建项目系列
- 下一篇: 遵守这些原则让你开发效率提高一倍