最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java異常監(jiān)控(監(jiān)控利器)

 更新時(shí)間:2026年03月05日 10:46:22   作者:風(fēng)的歸宿55  
這篇文章給大家介紹Java異常監(jiān)控(監(jiān)控利器)的相關(guān)知識(shí),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

介紹

說到監(jiān)控,很多人可能會(huì)第一時(shí)間想到各種指標(biāo),比如資源類的cpu,內(nèi)存,磁盤使用率,或者應(yīng)用層的請(qǐng)求數(shù),成功率,延遲等。但是將應(yīng)用程序中的異常文本導(dǎo)出為指標(biāo)進(jìn)行監(jiān)控,這種情況卻很少有人提到。 這個(gè)也是本片文章要介紹的內(nèi)容,一個(gè)很簡(jiǎn)單但是很有用的監(jiān)控利器,java異常監(jiān)控。當(dāng)然,這里也可以是其他語言的異常,比如python,go等。

優(yōu)點(diǎn)說明

這里說明下java異常監(jiān)控的幾大優(yōu)點(diǎn):

  1. 簡(jiǎn)單:使用java異常監(jiān)控的方式,可以很簡(jiǎn)單的發(fā)現(xiàn)線上的潛在問題,因?yàn)槟苡|發(fā)異常的肯定是意外情況,只要有java異常,就能代表出現(xiàn)了一些意外的情況,同時(shí)排查起來也簡(jiǎn)單,不像是接口的請(qǐng)求數(shù)和成功率,如果出現(xiàn)異常指標(biāo),排查起來耗費(fèi)時(shí)間,而且也很容易誤報(bào)。
  2. 全面:監(jiān)控指標(biāo)時(shí)很多時(shí)候都是根據(jù)經(jīng)驗(yàn)提前設(shè)置規(guī)則進(jìn)行預(yù)警,比如cpu使用率,請(qǐng)求成功率等,但是如果發(fā)生了意料之外的情況則很可能監(jiān)測(cè)不到。而java異常監(jiān)控可以全面的監(jiān)控到服務(wù)的問題,不管是業(yè)務(wù)代碼拋出的異常,還是沒有預(yù)想到的其他組件拋出的異常,都能被監(jiān)控到。
  3. 有效:通過每天進(jìn)行java異常巡檢,能夠有效的發(fā)現(xiàn)線上的異常,包括業(yè)務(wù)問題和組件問題,都能第一時(shí)間發(fā)現(xiàn)。同時(shí)也能有效的協(xié)助排查問題,比如線上出問題了,你看下java異常監(jiān)控,就能知道是什么服務(wù)在報(bào)錯(cuò),甚至可能可以直接根據(jù)異常鎖定錯(cuò)誤原因。
  4. 自定義:開發(fā)可以自定義異常,當(dāng)出現(xiàn)想要監(jiān)控的情況時(shí),在代碼中打印異常日志,這些異常就會(huì)被抓取并展示出來,運(yùn)維人員巡檢時(shí)就會(huì)發(fā)現(xiàn)這些異常并提醒開發(fā)進(jìn)行處理,這樣開發(fā)就可以簡(jiǎn)單的增加自己想要關(guān)注的監(jiān)控事項(xiàng)

使用方式

將java異常導(dǎo)入到prometheus生成指標(biāo)后,就可以開始進(jìn)行監(jiān)控,這里說明幾種監(jiān)控的使用方式:

  1. 日常巡檢:在grafana上展示java異常數(shù)據(jù),每日進(jìn)行巡檢,可以及時(shí)發(fā)現(xiàn)線上的異常
  2. 問題排查:需要緊急排查線上問題時(shí),可以展示最近幾分鐘的java異常,作為排查問題的參考
  3. 實(shí)時(shí)預(yù)警:配置報(bào)警規(guī)則,滿足條件時(shí)實(shí)時(shí)報(bào)警,比如觸發(fā)釘釘報(bào)警,用于快速發(fā)現(xiàn)線上的異常情況

這里提供一個(gè)grafana展示的異常報(bào)警界面。

基礎(chǔ)設(shè)施

  1. 需要有prometheus用于存儲(chǔ)指標(biāo)
  2. 需要有g(shù)rafana用于查詢展示指標(biāo)
  3. 需要有日志集中收集系統(tǒng),方便后續(xù)日志的統(tǒng)一處理
  4. 需要安裝mtail用于解析和導(dǎo)出異常指標(biāo)

實(shí)現(xiàn)流程

這個(gè)實(shí)現(xiàn)方式比較簡(jiǎn)單,這里先總體介紹下流程,首先是定義好指定的異常格式,然后再log4j這種日志框架中將異常日志額外存儲(chǔ)到一個(gè)文件,接著依靠日志集中收集系統(tǒng),將各個(gè)服務(wù)的異常日志收集到日志機(jī)器上,然后使用mtail追蹤異常日志并解析為指標(biāo),將指標(biāo)導(dǎo)出到prometheus。 指標(biāo)數(shù)據(jù)生成后,就可以配置查詢規(guī)則進(jìn)行g(shù)rafana展示以及進(jìn)行實(shí)時(shí)報(bào)警了。

日志打印

第一步首先是定義好需要收集的異常級(jí)別,一般就是error級(jí)別,不需要額外指定,然后是異常的日志格式,這個(gè)可以根據(jù)自己的需要配置log4j這種框架的日志格式,可以打印拋出異常的方法,異常類,異常信息,所屬模塊等,這里提供一個(gè)log4j2的部分配置以供參考

<Appenders>
        <RollingFile name="error_log" fileName="${filepath}/error/${filename}.log"
                     filePattern="${filepath}/error/${filename}.log-%d{yyyy-MM-dd-HH}">
            <ThrowableFilter type="useLocation" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss}\t${module}\t%class\t%method\t%line\t%throwable{1}\t%m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
            </Policies>
            <DefaultRolloverStrategy>
                <Delete basePath="${filepath}" maxDepth="2">
                    <IfFileName glob="*.log-*" />
                    <IfLastModified age="1h" />
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>
        <RollingFile name="error_log_for_throw" fileName="${filepath}/error/${filename}.log"
                     filePattern="${filepath}/error/${filename}.log-%d{yyyy-MM-dd-HH}">
            <ThrowableFilter type="useThrowable" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss}\t${module}\t%throwable{short.className}\t%throwable{short.methodName}\t%throwable{short.lineNumber}\t%throwable{1}\t%m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
            </Policies>
            <DefaultRolloverStrategy>
                <Delete basePath="${filepath}" maxDepth="2">
                    <IfFileName glob="*.log-*" />
                    <IfLastModified age="1h" />
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>
    </Appenders>

自定義日志打印

有個(gè)特殊的情況需要說明下,可以通過指定特殊的日志格式收集業(yè)務(wù)自定義異常,比如提前和開發(fā)說好,當(dāng)出現(xiàn)需要關(guān)注的嚴(yán)重業(yè)務(wù)問題時(shí),可以使用error級(jí)別打印日志,這樣運(yùn)維這邊就會(huì)在巡檢時(shí)發(fā)現(xiàn)并提醒開發(fā)處理。這種方式可以讓開發(fā)自由的增加業(yè)務(wù)異常監(jiān)控,提高了監(jiān)控的全面性。

日志收集

這部分就是日志收集系統(tǒng)的作用,將各個(gè)服務(wù)的異常日志文件統(tǒng)一收集到日志機(jī)器上的一個(gè)文件中,用于后續(xù)的mtail解析

mtail解析和導(dǎo)出異常監(jiān)控信息

把異常日志的文件路徑配置到mtail的啟動(dòng)命令上,讓mtail解析異常日志,這里提供一個(gè)參考的配置。修改后重啟mtail就能以標(biāo)準(zhǔn)格式導(dǎo)出指標(biāo)給prometheus了。

counter java_error_log by ip,type,module,class,method,line,exception
getfilename() == "/java/error/log/file.log" {
    /(?P<ip>[\S ]*)\t(?P<type>[\S ]*)\t([\S ]*)\t(?P<module>[\S ]*)\t(?P<class>[\S ]*)\t(?P<method>[\S ]*)\t(?P<line>[\S ]*)\t(?P<exception>[\S \t]*)[\n\t\S\s.]*/ {
      java_error_log[$ip][$type][$module][$class][$method][$line][$exception]++
    }
}

prometheus抓取mtail導(dǎo)出的數(shù)據(jù)

配置prometheus抓取mtail的數(shù)據(jù),這個(gè)增加個(gè)配置重啟prometheus就行了

- job_name: 'mtail-moniter'
  static_configs:
  - targets: ['11.11.11.11:3903']
    labels:
      exporter: 'mtail'

grafana展示異常數(shù)據(jù)

現(xiàn)在數(shù)據(jù)已經(jīng)存入prometheus中了,可以通過grafana進(jìn)行展示,這里也提供一個(gè)參考的grafana查詢的sql,可以按照時(shí)間維度把最近出現(xiàn)的和 數(shù)量有增長(zhǎng)的異常都查詢出來. 其中 __range 和 {__from:date:seconds}都是grafana的變量

(
  sum(
    java_error_log
    - min_over_time(
        java_error_log[$__range]
      )
  ) by(module,class,exception,line,method) > 0
  or (
    sum(
      java_error_log
    ) by(module,class,exception,line,method) > 0
    unless
    count(
      java_error_log
    @ ${__from:date:seconds}) by(module,class,exception,line,method) > 0
  )
)

結(jié)語

通過以上的簡(jiǎn)單配置就能擁有一個(gè)java異常監(jiān)控,各位讀者可以都去試試,這個(gè)監(jiān)控方式在我司已經(jīng)使用了很久了,能很有效的發(fā)現(xiàn)一些潛在問題。

到此這篇關(guān)于Java異常監(jiān)控(監(jiān)控利器)的文章就介紹到這了,更多相關(guān)java異常監(jiān)控內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java多線程實(shí)現(xiàn)方塊賽跑小游戲

    Java多線程實(shí)現(xiàn)方塊賽跑小游戲

    這篇文章主要為大家詳細(xì)介紹了Java多線程實(shí)現(xiàn)方塊賽跑小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • Java?17新特性詳細(xì)講解與代碼實(shí)例

    Java?17新特性詳細(xì)講解與代碼實(shí)例

    這篇文章主要給大家介紹了關(guān)于Java?17新特性詳細(xì)講解與代碼實(shí)例的相關(guān)資料,Java 17是2021年9月發(fā)布的最新版本,其中包含了很多新特性和改進(jìn),這些新特性和改進(jìn)將進(jìn)一步提高 Java 語言的性能和可用性,需要的朋友可以參考下
    2023-09-09
  • java必學(xué)必會(huì)之網(wǎng)絡(luò)編程

    java必學(xué)必會(huì)之網(wǎng)絡(luò)編程

    java必學(xué)必會(huì)之網(wǎng)絡(luò)編程,學(xué)習(xí)了解java網(wǎng)絡(luò)編程、網(wǎng)絡(luò)通信協(xié)議、TCP協(xié)議和UDP協(xié)議,對(duì)各個(gè)協(xié)議進(jìn)行深入學(xué)習(xí),做到必學(xué)必會(huì)
    2015-12-12
  • SpringBoot集成P6spy實(shí)現(xiàn)自定義SQL日志打印

    SpringBoot集成P6spy實(shí)現(xiàn)自定義SQL日志打印

    本文主要介紹了SpringBoot集成P6spy實(shí)現(xiàn)自定義SQL日志打印,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • springBoot  創(chuàng)建定時(shí)任務(wù)過程詳解

    springBoot 創(chuàng)建定時(shí)任務(wù)過程詳解

    這篇文章主要介紹了springBoot 創(chuàng)建定時(shí)任務(wù)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Java十道入門易踩坑題分析前篇

    Java十道入門易踩坑題分析前篇

    這篇文章總結(jié)分析了Java入門容易碰到的幾點(diǎn)易進(jìn)坑的題目,對(duì)于新手小白剛開始學(xué)Java非常有益處,讓你少走避開彎路,感興趣的朋友快來看看吧
    2022-01-01
  • Java數(shù)據(jù)結(jié)構(gòu)之選擇排序算法的實(shí)現(xiàn)與優(yōu)化

    Java數(shù)據(jù)結(jié)構(gòu)之選擇排序算法的實(shí)現(xiàn)與優(yōu)化

    選擇排序:(Selection?sort)是一種簡(jiǎn)單直觀的排序算法,也是一種不穩(wěn)定的排序方法。本文主要為大家介紹一下選擇排序的實(shí)現(xiàn)與優(yōu)化,希望對(duì)大家有所幫助
    2023-01-01
  • mybatis和mybatisplus批量插入問題示例詳解

    mybatis和mybatisplus批量插入問題示例詳解

    最近在處理一個(gè)功能的時(shí)候,需要批量插入數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于mybatis和mybatisplus批量插入問題的相關(guān)資料,文中通過實(shí)例代碼介紹非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • SpringBoot創(chuàng)建多模塊項(xiàng)目的全過程記錄

    SpringBoot創(chuàng)建多模塊項(xiàng)目的全過程記錄

    這篇文章主要給大家介紹了關(guān)于SpringBoot創(chuàng)建多模塊項(xiàng)目的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • IDEA代碼熱部署和熱加載的三種實(shí)現(xiàn)方案

    IDEA代碼熱部署和熱加載的三種實(shí)現(xiàn)方案

    在日常開發(fā)中,我們需要經(jīng)常修改 Java 代碼,手動(dòng)重啟項(xiàng)目,查看修改后的效果,如果在項(xiàng)目小時(shí),重啟速度比較快,等待的時(shí)間是較短的,我們可以使用代碼熱加載和熱部署解決該問題,本文給大家介紹了三種實(shí)現(xiàn)方案,需要的朋友可以參考下
    2023-11-11

最新評(píng)論

抚远县| 祁阳县| 房山区| 泰安市| 临城县| 佳木斯市| 涡阳县| 遵义县| 安化县| 嘉峪关市| 临安市| 巴林右旗| 沧州市| 册亨县| 保靖县| 随州市| 蒙山县| 新竹市| 广南县| 永丰县| 宁河县| 龙门县| 辽阳县| 哈巴河县| 夏河县| 界首市| 图木舒克市| 昭平县| 兴城市| 浦县| 克什克腾旗| 霍山县| 拉萨市| 章丘市| 博客| 西昌市| 满洲里市| 读书| 弋阳县| 萨嘎县| 古交市|