⑴ 如何做前端異常監控
如果想要自己實現,一個簡單的版本就是重寫'window.onerror'監聽事件,將監聽的數據發送到自己伺服器處理。
你也可以選擇一些前端BUG監控服務,比如國外的sentry, 國內的fundebug來做24小時實時監控。Fundebug的監控插件可以支持所有主流瀏覽器的錯誤監控,並且記錄用戶出錯前的行為,方便錯誤重現。而且大量的bug數據會通過機器學習智能聚合,整合分析。
⑵ 監控顯示屏閃爍怎麼解決 監控顯示屏閃爍解決方法
1、首先檢查各處視頻頭是否有異常。監控顯示屏上閃動,首先應該考慮視頻頭是否有異常,檢查視頻頭是否有松動、虛接,或者視頻頭損壞現象。視頻頭的檢查應該採用逐步排查的方法,可以從攝像機端的視頻頭開始排查也可以從監視器端往前排查。或者採用從中間路經的設備向其中一端排查的方法來找到故障視頻頭。排除故障時將視頻信號輸出端的視頻頭接在手持小型彩色監視器上,逐一排查,找到故障點。視頻頭松動需要重新緊固,視頻頭損壞需要重新焊接更換新視頻頭。
2、檢查視頻線是否異常。監控顯示屏上閃動,排除視頻頭的因素,還要考慮是否是視頻傳輸線路上存在異常。用萬用表測量視頻線,可以將攝像機端視頻頭的芯和視頻頭的外皮混接,再在監視器端視頻頭處,用萬用表帶蜂鳴器檔測量,看是否能發出「滴」聲,發出「滴」聲證明該段視頻線是通的。如果線路不通,可以再依據此方法分段排查。
3、檢查攝像機。監控顯示屏上閃動可以檢查攝像機是否存在異常。首先判斷監控顯示屏上閃動是全屏閃動還是單一畫面閃動,比如監視器是四個畫面的,只有其中一個畫面閃動,排除與攝像機相關聯的其他設備故障,判斷為攝像機故障後,更換新攝像機。
4、檢查攝像機鏡頭是否異常。還是以監控顯示屏為四畫面為例,如果只是其中的一個畫面閃動,排除攝像機、視頻頭、視頻線、以及相應端子故障外,就要檢查是否是相應閃動畫面的攝像機鏡頭出現了故障,導致畫面閃動現象的發生。判斷為攝像機鏡頭故障後,可以緊固攝像機鏡頭,或者更換新的攝像機鏡頭加以解決。
5、檢查監視器或者監視器通道是否異常。監控顯示屏上閃動可以檢查監視器或者監視器通道是否存在異常。如果監視器有兩個視頻輸入通道,首先將視頻輸入線更換到監視器的另一個備用通道上,檢查更換通道後的監視器是否還存在閃動現象,如果故障現象依舊存在,嘗試更換監視器解決。
6、檢查視頻隔離地變壓器,視頻分配器,矩陣處的端子是否有異常。監控顯示屏上閃動,可以檢查中間途經的各個設備的端子是否存在異常。比如,視頻隔離地變壓器,視頻分配器以及矩陣,可以採用手持小型彩色監視器,採取逐斷排查的方法,找到相應的故障點。並且採用更換端子的方式,看看是否能將故障排除。
⑶ 網路監控故障常見問題
網路監控故障常見的問題。
1、機器無法啟動
首先看看接攝像機的電源網線燈是否亮,不亮就是電源故障。換電源。其次看供電電壓或者功率是不是不夠。
2
/10
2、沒有監視畫面
看指示燈,檢查電源和網線是否連上;拔掉電源等待一分鍾左右,再插上,或者重啟網路攝像機 。
3
/10
3、通過瀏覽器無法訪問
檢查電源和網路是否連接正常;檢查本機,集線器,交換機和網卡的電源及網路指示燈實現工作狀態;查看IP地址、埠是否被佔用。
4
/10
4、錄像回放時,出現系統假死現像
可能是在搜索的內容過多,系統反應遲鈍,請勿此時亂按其他鍵靜靜等待兩至三分鍾就可以。
5
/10
5、顯示器上出現色差太大,畫面不清晰。
這種情況是顯示器長時間開啟,磁場干擾造成的, 這種情況只需要消磁就可以了。
6
/10
6、畫面越來越模糊
這可能跟監控頭所在的位置有關系,灰塵比較大或是室內較潮濕造成的,所以監控灰塵厚的時候要擦拭,日常維護工作要做好。
7
/10
7、畫面突然間沒了
這種可能是錄像機後面扣接頭松動了,或是老化了。如果松動可以按照通道找到此接頭處,輕輕旋轉扣接頭,就可以拔掉,然後重新插上。如果是老化了,那就找維修人員來處理了;U盤或是移動硬碟拷貝不出需要的資料,這是文件資料不對,這時候要把U盤或是移動硬碟的格式化成FAT32類型。
8
/10
8、畫面不連貫
網路寬頻被佔用,如下載大文件。可以暫停試試;同時觀看幾路視頻,如果您的寬頻是1M,觀看3路以上視頻話出現畫面卡的情況;同時3個人以上連接網路攝像機。查明是否賬號泄露,及時修改您的密碼;碼流設置較大,把碼流設置小一點看看;網路環境較差,出現包跳幀的現象,畫面不流暢。
9
/10
9、時間顯示不對
時間顯示相差太大或出現亂碼,一般是電池座接觸不良或者使用電壓偏低。檢查電池松緊和電壓高低。
10
/10
10、硬碟錄像機上面錄像指示燈不亮了
這種情況可能懸硬碟壞了,或是未設置錄像,當發生這種情況的時候第一時間查看硬碟是否出現錯誤,查看方法是登錄網盤錄像機主頁面,找到硬碟管理然後用下面鍵盤查看是否正常。如果出現錯誤要及時聯系維修人員上門維修。
⑷ 監控錄像顯示不在線是怎麼回事。有兩個頭正常運行,一個頭不在線怎麼辦
有一個攝像頭不在線可能的原因是:一是沒有電或者電源有問題;二是網線鏈接存在題,可以使用對線器測試一下;三是檢查硬碟錄像機是否對該攝像機進行添加錄像。也可以使用攝像機廠家的搜索軟體進行搜索,看看是否在線,如果能搜索到,添加錄像就好。
⑸ Web前端工程師如何處理Web前端的異常_
今天小編要跟大家分享的文章是關於Web前端工程師如何處理前端的異常。前端一直是距離用戶最近的一層,隨著產品的日益完善,我們會更加註重用戶體驗,而前端異常卻如鯁在喉,甚是煩人。下面我們就來看一看前端工程師該如何處理前端異常。一、為什麼要處理異常異常是不可控的,會影響最終的呈現結果,但是我們有充分的理由去做這樣的事情。
1.增強用戶體驗;
2.遠程定位問題;
3.未雨綢繆,及早發現問題;
4.無法復線問題,尤其是移動端,機型,系統都是問題;
5.完善的前端方案,前端監控系統;
對於JS而言,我們面對的僅僅只是異常,異常的出現不會直接導致JS引擎崩潰,最多隻會使當前執行的任務終止。二、需要處理哪些異常?對於前端來說,我們可做的異常捕獲還真不少。總結一下,大概如下:
·___S語法錯誤、代碼異常
·___JAX請求異常
·___蔡試醇釉匾斐
·___romise異常
·___frame異常
·___纈_cripterror
·___覽:塗ǘ
下面我會針對每種具體情況來說明如何處理這些異常。三、Try-Catch的誤區try-catch只能捕獲到同步的運行時錯誤,對語法和非同步錯誤卻無能為力,捕獲不到。
1.同步運行時錯誤:
try{
letname='jartto'
console.log(nam);
}catch(e){
console.log('捕獲到異常:',e);
}
輸出:
捕獲到異常:ReferenceError:namisnotdefined
at:3:15
2.不能捕獲到語法錯誤,我們修改一下代碼,刪掉一個單引號:
try{
letname='jartto;
console.log(nam);
}catch(e){
console.log('捕獲到異常:',e);
}
輸出:
UncaughtSyntaxError:Invalidorunexpectedtoken
不過語法錯誤在我們開發階段就可以看到,應該不會順利上到線上環境。
3.非同步錯誤
try{
setTimeout(()=>{
undefined.map(v=>v);
},1000)
}catch(e){
console.log('捕獲到異常:',e);
}
我們看看日誌:
UncaughtTypeError:Cannotreadproperty'map'of
undefined
atsetTimeout(:3:11)
並沒有捕獲到異常,這是需要我們特別注意的地方。四、window.onerror不是萬能的當JS運行時錯誤發生時,window會觸發一個ErrorEvent介面的error事件,並執行window.onerror()。/**
*@param{String}message錯誤信息
*@param{String}source出錯文件
*@param{Number}lineno行號
*@param{Number}colno列號
*@param{Object}errorError對象(對象)
*/
window.onerror=function(message,source,lineno,colno,error){
console.log('捕獲到異常:',{message,source,lineno,colno,error});
}
1.首先試試同步運行時錯誤
window.onerror=function(message,source,lineno,colno,
error){
//message:錯誤信息(字元串)。
//source:發生錯誤的腳本URL(字元串)
//lineno:發生錯誤的行號(數字)
//colno:發生錯誤的列號(數字)
//error:Error對象(對象)
console.log('捕獲到異常:',{message,source,lineno,colno,
error});
}
Jartto;
可以看到,我們捕獲到了異常:
2.再試試語法錯誤呢?
window.onerror=function(message,source,lineno,colno,
error){
console.log('捕獲到異常:',{message,source,lineno,colno,error});
}
letname='Jartto
控制台列印出了這樣的異常:
UncaughtSyntaxError:Invalidorunexpectedtoken
什麼,竟然沒有捕獲到語法錯誤?
3.懷著忐忑的心,我們最後來試試非同步運行時錯誤:
window.onerror=function(message,source,lineno,colno,
error){
console.log('捕獲到異常:',{message,source,lineno,colno,error});
}
setTimeout(()=>{
Jartto;
});
控制台輸出了:
捕獲到異常:{message:"Uncaught
ReferenceError:Jarttoisnotdefined",source:
"http://127.0.0.1:8001/",lineno:36,colno:5,error:
ReferenceError:Jarttoisnotdefined
atsetTimeout(http://127.0.0.1:8001/:36:5)}
4.接著,我們試試網路請求異常的情況:
我們發現,不論是靜態資源異常,或者介面異常,錯誤都無法捕獲到。
補充一點:window.onerror函數只有在返回true的時候,異常才不會向上拋出,否則即使是知道異常的發生控制台還是會顯示UncaughtError:xxxxx
window.onerror=function(message,source,lineno,colno,
error){
console.log('捕獲到異常:',{message,source,lineno,colno,error});
returntrue;
}
setTimeout(()=>{
Jartto;
});
控制台就不會再有這樣的錯誤了:
UncaughtReferenceError:Jarttoisnotdefined
atsetTimeout((index):36)
需要注意:onerror最好寫在所有JS腳本的前面,否則有可能捕獲不到錯誤;onerror無法捕獲語法錯誤;
到這里基本就清晰了:在實際的使用過程中,onerror主要是來捕獲預料之外的錯誤,而try-catch則是用來在可預見情況下監控特定的錯誤,兩者結合使用更加高效。
問題又來了,捕獲不到靜態資源載入異常怎麼辦?五、window.addEventListener當一項資源(如圖片或腳本)載入失敗,載入資源的元素會觸發一個Event介面的error事件,並執行該元素上的onerror()處理函數。這些error事件不會向上冒泡到window,不過(至少在Firefox中)能被單一的window.addEventListener捕獲。
window.addEventListener('error',(error)=>{
console.log('捕獲到異常:',error);
},true)
控制台輸出:
SHAPE*MERGEFORMAT
由於網路請求異常不會事件冒泡,因此必須在捕獲階段將其捕捉到才行,但是這種方式雖然可以捕捉到網路請求的異常,但是無法判斷HTTP的狀態是404還是其他比如500等等,所以還需要配合服務端日誌才進行排查分析才可以。
需要注意:
·___煌榔饗路禱氐_rror對象可能不同,需要注意兼容處理。
·___枰⒁獗苊_ddEventListener重復監聽。六、PromiseCatch在promise中使用catch可以非常方便的捕獲到非同步error,這個很簡單。
沒有寫catch的Promise中拋出的錯誤無法被onerror或try-catch捕獲到,所以我們務必要在Promise中不要忘記寫catch處理拋出的異常。
解決方案:為了防止有漏掉的Promise異常,建議在全局增加一個對unhandledrejection的監聽,用來全局監聽UncaughtPromiseError。使用方式:
window.addEventListener("unhandledrejection",
function(e){
console.log(e);
});
我們繼續來嘗試一下:
window.addEventListener("unhandledrejection",
function(e){
e.preventDefault()
console.log('捕獲到異常:',e);
returntrue;
});
Promise.reject('promiseerror');
可以看到如下輸出:
那如果對Promise不進行catch呢?
window.addEventListener("unhandledrejection",
function(e){
e.preventDefault()
console.log('捕獲到異常:',e);
returntrue;
});
ewPromise((resolve,reject)=>{
reject('jartto:promiseerror');
});
嗯,事實證明,也是會被正常捕獲到的。
所以,正如我們上面所說,為了防止有漏掉的Promise異常,建議在全局增加一個對unhandledrejection的監聽,用來全局監聽UncaughtPromiseError。
補充一點:如果去掉控制台的異常顯示,需要加上:
event.preventDefault();七、VUEerrorHandlerVue.config.errorHandler=(err,vm,info)=>{
console.error('通過vue
errorHandler捕獲的錯誤');
console.error(err);
console.error(vm);
console.error(info);
}八、React異常捕獲React16提供了一個內置函數componentDidCatch,使用它可以非常簡單的獲取到react下的錯誤信息
componentDidCatch(error,info){
console.log(error,info);
}
除此之外,我們可以了解一下:errorboundaryUI的某部分引起的JS錯誤不應該破壞整個程序,為了幫React的使用者解決這個問題,React16介紹了一種關於錯誤邊界(errorboundary)的新觀念。
需要注意的是:errorboundaries並不會捕捉下面這些錯誤。
1.事件處理器2.非同步代碼3.服務端的渲染代碼4.在errorboundaries區域內的錯誤
我們來舉一個小例子,在下面這個componentDIdCatch(error,info)里的類會變成一個errorboundary:
.Component{
constructor(props){
super(props);
this.state={hasError:false};
}
componentDidCatch(error,info){
//DisplayfallbackUI
this.setState({hasError:true});
//
logErrorToMyService(error,info);
}
render(){
if(this.state.hasError){
//
returnSomethingwentwrong.
;
}
returnthis.props.children;
}
}
然後我們像使用普通組件那樣使用它:
componentDidCatch()方法像JS的catch{}模塊一樣工作,但是對於組件,只有class類型的組件(classcomponent)可以成為一個errorboundaries。
實際上,大多數情況下我們可以在整個程序中定義一個errorboundary組件,之後就可以一直使用它了!九、iframe異常對於iframe的異常捕獲,我們還得借力window.onerror:
window.onerror=function(message,source,lineno,colno,
error){
console.log('捕獲到異常:',{message,source,lineno,colno,error});
}
一個簡單的例子可能如下:
frameborder="0">
十、Scripterror一般情況,如果出現Scripterror這樣的錯誤,基本上可以確定是出現了跨域問題。這時候,是不會有其他太多輔助信息的,但是解決思路無非如下:
跨源資源共享機制(CORS):我們為script標簽添加crossOrigin屬性。
或者動態去添加js腳本:
constscript=document.createElement('script');
script.crossOrigin='anonymous'
script.src=url;
document.body.appendChild(script);
特別注意,伺服器端需要設置:Access-Control-Allow-Origin
此外,我們也可以試試這個-解決ScriptError的另類思路:
constoriginAddEventListener=EventTarget.prototype.addEventListener;
EventTarget.prototype.addEventListener=function(type,listener,options){
constwrappedListener=function(...args){
try{
returnlistener.apply(this,args);
}
catch(err){
throwerr;
}
}
returnoriginAddEventListener.call(this,type,wrappedListener,options);
}
簡單解釋一下:
·___男戳_ventTarget的addEventListener方法;
·___源氳_istener進行包裝,返回包裝過的listener,對其執行進行try-catch;
·___榔韃換岫_ry-catch起來的異常進行跨域攔截,所以catch到的時候,是有堆棧信息的;
·___匭_hrow出來異常的時候,執行的是同域代碼,所以window.onerror捕獲的時候不會丟失堆棧信息;
利用包裝addEventListener,我們還可以達到「擴展堆棧」的效果:
(()=>{
constoriginAddEventListener=EventTarget.prototype.addEventListener;
EventTarget.prototype.addEventListener=function(type,listener,options){
+//捕獲添加事件時的堆棧
+constaddStack=newError(`Event(${type})`).stack;
constwrappedListener=function(...args){
try{
returnlistener.apply(this,args);
}
catch(err){
+//異常發生時,擴展堆棧
+err.stack+='
'+addStack;
throwerr;
}
}
returnoriginAddEventListener.call(this,type,wrappedListener,options);
}
})();十一、崩潰和卡頓卡頓也就是網頁暫時響應比較慢,JS可能無法及時執行。但崩潰就不一樣了,網頁都崩潰了,JS都不運行了,還有什麼辦法可以監控網頁的崩潰,並將網頁崩潰上報呢?
崩潰和卡頓也是不可忽視的,也許會導致你的用戶流失。
1.利用window對象的load和beforeunload事件實現了網頁崩潰的監控。不錯的文章,推薦閱讀:Logging
InformationonBrowserCrashes。window.addEventListener('load',function(){
sessionSt
⑹ 如何做前端異常監控
1、監控系統分前端和後端。 2、顧名思義,前端是指監控攝像頭;後端是指機房端(有硬碟錄像機、解碼器、矩陣等)。
⑺ 監控連不上網,怎麼設置
因為主機沒有與路由器同一網段,通過更正IPv4參數以後才能處理。以海康威視監控為例,設置的辦法如下:
1、直接打開電腦瀏覽器,輸入IP地址進行跳轉。