重返英國有望 河狸不只會築壩治水 還能抗污染、救動物

環境資訊中心綜合外電;姜唯 編譯;林大利 審校

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步”網站設計“幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※試算大陸海運運費!

Google在Nature上發表的關於量子計算的最新進展的論文(Quantum supremacy using a programmable superconducting processor 譯)— 附論文

Google 的研究人員於2019年10月23號發表在Nature自然》《科學《細胞》雜誌都是國際頂級期刊,貌似在上面發文3篇左右,就可以評院士了)上,關於量子計算方面(基於 Sycamore芯片)的具有里程碑式進展的論文,受到國內外同行及媒體的廣泛關注,包括中科大量子科學家 — 潘建偉及其團隊。特朗普的女兒Ivanka Trump(左一)也發twitter表示祝賀,如下圖:

Even as Ivanka praised the parties involved in this new quantum computing achievement, a number of social media users appeared critical of her assessment of the Trump administration’s role in this endeavour.

IBM表示不服,Google不care。下面讓我們逐字逐句來看他們的論文吧,對於爭論的事情,自己下功夫搞清楚。

 

Quantum supremacy using a programmable superconducting processor

基於可編程的超導處理器實現的量子霸權 

 相關資源:https://doi.org/10.1038/s41586-019-1666-5

 接收日期:2019年7月20日

 核准日期:2019年9月20日

 在線發布:2019年10月23日

 

Abstract

引言

量子計算機吹牛逼說,對於特定的計算任務,基於量子處理器的計算機,其速度相較於經典處理器呈指數級增長。根本的挑戰在於構建一個能夠在海量的計算空間上運行量子算法的高保真處理器。我們的報告是關於,一個基於53量子比特實現的可編程的超導量子芯片,在253(約1016)的計算狀態空間創建了一個量子態的故事。

我們用經典模擬驗證了重複實驗測量結果的採樣概率分佈。我們的Sycamore處理器採樣一個量子電路100萬次,大約花了200秒——我們的基準測試表明,同樣的任務最先進的超級計算機大約需要花費10000年。相較於所有已知的經典算法,對於這個特定的計算任務,用實驗實現的量子優越性在速度方面的顯著提升,預示着一個期待已久的計算範式。

 

Main

正文

早在20世紀80年代,有鑒於經典計算機在模擬大型量子系統時的高昂成本,理查德·費曼(Richard Feynman)就提出量子計算機將是解決物理、化學問題的有效工具。將費曼的設想付諸實現,構成了重大的實驗和理論挑戰。

首先,一個能夠在足夠巨大的計算空間(hibert)進行計算並且以低錯誤率提供量子加速的量子系統,工程上是否可行?其次,我們能否構建一個對於經典計算機很難但是對於量子計算機比較簡單的問題?通過在我們的超導量子處理器上運算這樣的一個基準任務,我們解決了這2個問題。我們的實驗實現了量子優越性,這是全面實現量子計算征程的里程碑。

在實現里程碑的過程中,我們證明了量子加速在現實世界是可達到的,也沒有被任何未知的物理定律所排除。量子優越性也預示着嘈雜的中型量子(NISQ,筆者:嘈雜意味着不穩定,噪音嚴重)技術時代的到來。我們論證的基準任務,已經立即用於生成可認證的隨機數(S. Aaronson,手稿正則準備中);這個新的計算能力的最初應用領域可能包括優化機器學習、材料科學和化學。然而,實現完全意義的量子計算(例如,Shor的分解算法)仍有待於技術的飛越以製造支持容錯邏輯的量子比特。

為了達成量子優越性,我們取得了一系列的技術進步,從而為糾錯鋪平了道路。我們研製了可以同時執行跨兩個維度量子矩陣的快速高保真門。我們使用了強大的新工具:交叉熵基準,在組件和系統層面對處理器進行了校準和基準測試。最後,為了精確預測整個系統的性能,我們使用了組件級的保真度,從而進一步證明當擴展到大型系統時量子信息的行為符合預期。

 

A suitable computational task

合適的計算任務

為了證明量子優越性,我們在採樣量子電路的偽隨機輸出任務中,比較我們的量子處理器和最新的經典計算機。隨機電路是基準測試的一個合適選擇,因為它門不具有結構,因此可以有限地保證計算硬度。我們設計的電路通過重複應用單量子和雙量子邏輯運算實現了一組量子的糾纏。採樣量子電路的輸出生成了一串比特串,例如{0000101, 1011100, …}。由於量子干擾的存在,比特串的概率分佈類似於在激光散射中的光干擾產生的強模型的斑點,因此有些比特串比其它的更容易出現。隨着量子比特的數量(寬度)和門循環數量(深度)的增加,概率分佈之經典計算的難度呈指數級增加。

我們使用稱為交叉熵基準測試的方法來驗證量子處理器是否正常工作,該方法將通過比較實驗觀察的每個比特串的頻率與通過經典計算機的模擬計算得出對應的理想概率。對於給定的電路,我們收集測得的比特串{xi}並且計算線性交叉熵基準的保真度(另請參見),這是我們測得的比特串的模擬概率的平均值:

FXEBY= 2n<P(xi)>i  ‐ 1

其中n是量子比特的總數,P(xi) 是為理想的量子電路計算的位串 xi 的概率,並且平均值超過了觀察到的比特串。直觀地講,FXEB和我們採樣高概率的比特串的頻率相關。當量子電路沒有錯誤的時候,其概率分佈呈指數分佈 (請參見),從這個分佈採樣將使得FXEB = 1。另一方面,從均勻分佈採樣將得到:P(xi)i = 1/2,FXEB  = 1。FXEB的值介於0和1之間,表示電路運行時沒有錯誤發生的概率。概率(P(xi) )必須從經典模擬量子電路得到,因此在至高無上的量子優越性上面計算FXEB十分棘手。然而,通過某些簡化的電路,我們可以估計出在寬和深量子電路上滿載運行的處理器的定量保真度。

 我們的目標是通過足夠寬和深的電路實現足夠高的FXEB,這樣經典計算的成本將高的難以承受。這是一個艱巨的任務,因為我們的邏輯門並不完美,我們打算構造的量子態對錯誤也很敏感。在算法運行過程中,單個比特或相位的翻轉將徹底重構斑點圖案並且導致保真度逼近0(請參見)。因此,為了宣稱量子的優越性,我們需要一個能夠以非常低的錯誤率運行程序的量子處理器。

 

Building a high-fidelity processor

構建高保真處理器

我們設計了一個名為“Sycamore”的量子處理器,它由54個特蘭蒙量子比特的二維陣列組成,其中每個量子位可調耦合到一個矩形格子的四個最近的相鄰接點。選擇這個連接是為了與使用表層代碼的糾錯向前兼容。這個設備的一項關鍵性系統進步是它實現了單量子比特和雙量子比特運算的高保真度,不單單是孤立的,而且可以在許多量子比特上同時進行門運算和現實計算。我們接下來討論重點,也請參見。

在一個超導量子比特里,傳導电子會凝聚成宏觀量子態,這樣電流和電壓會机械地呈現出量子態。我們的處理器使用特蘭蒙量子比特,可以將其視為擁有5-7 G赫茲主頻的非線性超導諧振器。其量子比特被編碼為諧振電路的兩個最低量子本徵態。每個特蘭蒙都有兩個控制器:一個微波驅動器來激發量子比特,以及一個磁通量控制器來調製頻率。每個量子比特被連接到用於讀出量子比特狀態的線性諧振器。如圖1所示,每個量子比特同時通過一個新的可調耦合器連接到其相鄰的量子比特。我們的耦合器設計允許我們快速將量子比特—量子比特耦合從完全關停調整到40 M赫茲。1個量子比特無法正常運轉,所以這個設備用了53個量子比特和86個耦合器。

           圖.1 : Sycamore 處理器

為了金屬化和約瑟夫森連接,處理器用鋁製造,並使用銦製造兩個硅晶片之間的凸點。芯片用引線粘合到超導電路板上,並在稀釋冰箱中冷卻至20 mK以下,以將環境熱能降低到大大低於量子比特能。處理器通過濾波器和衰減器連接到處於室溫的电子設備,該設備可合成控制信號。使用頻率復用技術可以同時讀取所有量子比特的狀態。我們用兩級低溫放大器來增強信號,該信號被数字化(在1 G赫茲頻率時為8比特)並在室溫下通過数字化實現解復用。為了完全控制量子處理器,我們總共設計了277個數模轉換器(在1G赫茲頻率時為14比特)

 我們通過驅動25納秒的微波脈衝來執行單量子比特門,該微波脈衝會以量子頻率共振,同時關閉量子比特-量子比特耦合。脈衝經過整形,從而最大程度地避免了過渡到更高的特蘭蒙狀態。由於兩級系統缺陷,門的性能會隨頻率產生很大的變化,雜散微波模式會與控制線和讀出諧振器相耦合,量殘餘的雜散耦合於量子比特、磁通噪聲和脈衝失真。有鑒於此,我們優化了單量子比特操作頻率以減免這些錯誤機制。

我們使用上述交叉熵基準測試協議對單量子比特門的性能進行基準測試,降低到單量子比特級別(n = 1),以測量在單量子比特門期間發生錯誤的概率。在每個量子比特上,我們應用數量可變的m個隨機選擇的門,並在許多序列上測量FXEB的平均值;隨着m的增加,誤差會累積、FXEB的平均值會下降。我們用[1 − e1 /(1 − 1 / D2)] m對該衰減建模,其中e1是Pauli誤差概率。在這種情況下,狀態(希爾伯特)的空間量綱,D = 2n,等於2,它校正了誤差與理想態部分重疊的去極化模型。該過程類似於更典型的隨機基準測試,但支持非Clifford門的集合,並且可以將消退相干誤差與相干控制誤差區分開。然後,我們重複了所有量子比特同時執行單量子比特門的實驗(圖2),而錯誤率僅僅表現出微小的增長,表明我們設備的微波干擾率很低。

         圖.2 : 全系統的 Pauli 和 測量錯誤

我們通過持續打開20 M赫茲耦合12 納秒,並使相鄰的量子位共振來執行類似iSWAP的兩個量子比特糾纏門,從而允許量子比特可以交換激勵。在此期間,量子比特還經歷了受控相位(CZ)的交互作用,該交互作用來自於更高級別的特蘭蒙。優化每對量子比特的兩個量子比特門限頻率軌跡,是為了減少在優化單量子比特工作頻率時所要考慮的相同錯誤機制。

為了表徵和量化兩個量子比特門,我們運行了m個周期的兩個量子比特電路,每個周期在每個雙量子比特上都包含一個隨機選擇的單量子比特門,緊跟着固定的兩個量子比特門。通過使用FXEB作為成本函數,我們學習了兩個量子單位的參數(例如iSWAP和CZ交互的數量)。經過這次優化,我們從值為 m 的FXEB的衰變中提取每周期錯誤e2c,並減去兩個單量子比特的錯誤e1來分離出兩個量子比特錯誤e2。我們發現e2的平均值為0.36%。 另外,我們在為整個矩陣同步運行雙量子比特電路的同時重複執行相同的過程。在為諸如,色散漂移和串擾等,考慮影響而更新單一參數后,我們發現e2的平均值為0.62%。

對於整個實驗,我們在同步操作期間用兩個量子比特元測量每一對,而不是所有對的標準門,生成量子電路。典型的兩個量子比特門是一個全iSWAP,並且擁有1/6的全CZ。絕不使用單獨校準的門來限制演示的通用性。例如,1個量子比特門和任意給定對中的兩個唯一的量子比特門可以組成可控NOT(CNOT)門。高保真“教科書似的門”,例如CZ或iSWAP ,的製作正在緊鑼密鼓地進行。

最後,我們通過使用標準色散測量對量子比特讀數進行了基準測試。在0和1狀態下的平均測量誤差如圖2a所示。
我們還通過讓每個量子比特隨機的處於0或1的狀態,然後測量所有量子比特以獲得正確結果的概率,來測量同時運行所有量子比特時的錯誤。我們發現,同時讀出僅僅會導致每個量子比特測量誤差的適度增加。

找到了單個門的錯誤率和讀數后,我們可以將量子電路的保真度建模為所有門和測量的0錯誤操作概率的乘積。我們最大的隨機量子電路有53個量子比特,1113個單量子比特門,430個雙量子比特門,每個量子比特一個亮度,我們估計其總保真度為0.2%。由於FXEB的不確定度為1 /Ns-√1/ Ns(其中Ns是樣本數),因此這個保真度應該可以通過數百萬次的測量來分辨。我們的模型推測,糾纏越來越大的系統不會引入超出我們在單比特和兩比特級別上測量的誤差之外的其他錯誤源。 在下一節中,我們將了解該假設的成立情況。

 

Fidelity estimation in the supremacy regime

優越性的逼真度估算

我們的偽隨機量子電路生成器的門序列如 圖3 所示。此算法的一個周期由應用於所有量子的單量子(從{√X, √Y, √Z}隨機選擇),緊跟着的成對的量子比特上的兩個量子比特門組成。組成“優越性電路”的門序列旨在最小化為創造一個高糾纏態的電路深度,而這正是計算複雜度和經典硬度所需。

                   圖.3 : 量子優越性電路的控制操作

儘管我們無法在至高無上的體系中計算FXEB,但是我們可以通過降低電路的複雜度的三個變體來評估它。在“貼片電路”中,我們移除掉了兩個量子比特門的一部分(佔兩個量子比特門總數的一小部分),將電路分割成兩個空間上隔離的,沒有相互作用的量子比特補丁。然後我們用可以輕鬆計算出保真度的補丁的乘積作為總的保真度。在“消除電路”中,我們沿切片僅去除了最初的兩個量子比特門的一小部分,允許補丁之間的糾纏,這在維持了仿真可行性的同時更緊密地模擬了整個實驗。最終,我們也可以運行同我們的優越性電路有着相同門數的全“驗證電路”,但卻與在傳統上容易模擬的多的兩电子門序列有着不同的模式(也請參見)。比較這些三個變體讓我們能夠在接近優越性制度的過程中追蹤系統保真度。

我們首先檢查補丁版本和刪節版本的驗證電路是否能與多達53量子比特的完整驗證電路產生相同的保真度,如圖4所示。每個數據點,我們通常在10個電路實例中採集 Ns = 5 × 106的總樣本,每個實例的區別僅在於在每個周期中單個量子門的選擇不同。我們也显示FXEB的預測值該值是通過將單量子和雙量子比特門的0錯誤率和測量值相乘而得到的(也請參見)儘管在計算複雜度和糾纏存在巨大差異,這個預測值、補丁及消除的保真度都對應的全電路的保真度吻合的很好。這讓我們對消隱電路可以用於準確估計更為複雜電路的保真度充滿信心。

                圖.4 : 量子優越性的證明

保真度仍可以直接被驗證的最大電路有53個量子比特和一個簡化處理過的門電路。100萬個內核以0.8%的保真度對這些隨機電路進行採樣需要花費130秒,相較於單核,量子處理器有百萬倍的加速。

我們現在繼續對計算最複雜電路進行基準測試,這個只是2個比特門的重排列。在圖4中,我們显示了通過不斷增加深度,針對53量子比特的全優越性電路的補丁版和消隱版本測得的FXEB。對於有53個量子比特和20個周期的最大電路,我們在10個電路實例上搜集了 Ns = 30 × 106

樣本,對於消隱電路得到的FXEB = (2.24±0.21)×10−3。基於5σ的置信度,我們斷定在量子處理器上運行這些電路的平均保真度至少大於0.1%。我們預期 圖4b的全部數據應具有近似的保真度,但是由於仿真時間(紅色数字)需要很長時間才能檢查,我們將數據歸檔(參見“數據可用性”部分)。這部分數據因此處於量子至上的狀態。

 

The classical computational cost

經典計算的成本

我們在經典計算機的實驗中模擬量子電路有2個目的:(1))通過使用可能簡化的電路計算FXEB來驗證我們的量子處理器和基準測試方法(圖4a),(2)估算FXEB以及對最困難的電路進行採樣的經典成本(圖4b)。對多達43個量子比特,我們使用Schrödinger算法,該算法模擬了完整量子態的演化;在Jülich超級計算機(100,000核、250 TB)運行了最大的樣例。超過此大小,則沒有足夠的隨機存取存儲器(RAM)來存儲量子的狀態了。對於更多的量子比特,我們使用運行在Google數據中心的混合Schrödinger-Feynman算法來計算單個比特串的幅度。在使用類似費曼路徑積分的方法連接它們之前,該算法將電路拆分為兩個量子比特補丁,並使用Schrödinger方法有效地模擬每個補丁。儘管具有更高的內存效率,但隨着路徑深度與連接補丁的門的數量呈指數增長,隨着電路深度的增加,Schrödinger-Feynman算法的計算量也呈指數增長。

為了估算優越性電路的經典計算成本(圖4中的灰色数字),我們在Summit超級計算機以及Google集群上都運行了部分量子電路的仿真,從而推斷出其全部成本。在此推斷中,我們通過擴展FXEB的驗證成本來認定採樣的計算成本,例如,一個0.1%減少了約1000的花費。在當今世界上功能最強大的Summit超級計算機上,我們使用了一個受費曼路徑積分啟發的方法,該方法在低深度下效率最高。當m = 20時,張量無法合理地放入節點內存中,因此我們只能在m=14時測量運行時間,因此我們估計以1%的保真度採樣300萬個比特串將需要一年。

在谷歌雲服務器上,我們預估使用Schrödinger-Feynman算法以0.1%的保真度在m = 20時運行相同的任務將耗費50萬億個核/小時,並消耗1皮瓦時的能量。從這個角度來看,對量子處理器上的電路採樣三百萬次需要600秒,而採樣時間受控制硬件通信的限制;實際上,量子處理的凈量子處理器的凈時間僅為30秒左右。所有電路的比特串樣本都已在線存檔(請參見“數據可用性”部分),以激勵開發和測試更高級的驗證算法。

有人可能會懷疑算法創新可以在多大程度上增強經典模擬的效果。我們的假設基於複雜理論的認知,即算法任務的成本是電路大小的指數。的確,在過去的幾年中,模擬算法已經得到了穩步的提升。我們預計最終將實現比報告里提到的更低的仿真成本,但是我們也期望更大型的量子處理器在硬件方面的改進將持續超越它們。

 

Verifying digital error model

驗證数字錯誤模型

基於量子錯誤校正理論的一個關鍵假設是—量子態錯誤可以考慮数字化和本地化。基於這樣的一個数字模型,演化量子態中的所有錯誤都可能通過散布在電路中的一組局部保利誤差(位翻轉或相位翻轉)來表徵。由於持續振幅是量子力學的基礎,所以需要測試量子系統中的錯誤是否可以被視為離散的和呈概率分佈的。我們實驗的觀察結果證明該模型對我們處理器確實是有效的。我們系統的保真度可以通過一個簡單的模型很好地預測,在該模型中,每個門各自的特徵保真度相乘起來(圖4)。

為了能成功被数字化錯誤模型描述,系統的相關雙指數級得很小才行。我們通過選擇隨機化和解相關錯誤的電路,優化控制以最大程度地減少系統錯誤和泄漏以及設計比相關噪聲源(如1 / f磁通噪聲)運行得更快的門,從而在我們的實驗中達成了這一點。通過在高達253的希爾伯特空間對預測性不相關的誤差模型的演示,可以表明我們可以構建一個系統,在該系統中量子資源(例如糾纏)不會過於脆弱。

 

The future

未來

基於超導量子比特的量子處理器現在可以處理,量綱為253 ≈ 9 ×1015的希爾伯特(Hilbert)空間的計算,超出了當今最快的經典超級計算機的上限。據我們所知,此次試驗標記了只能在量子處理器運行的第一個計算。量子處理器因此構建了量子優越性的制度。我們希望他們的計算能力將繼續以雙指數級的比率增長:模擬量子電路的經典成本隨着計算量的增加而呈指數級的增長,而硬件的提升將可能遵循量子處理器當量的摩爾定律,即每隔幾年此計算量就翻倍。為了支撐雙指數級的增長率並最終提供運算著名的,如Shor 或者Grover ,量子算法所需的計算量,量子誤差修正的工程學將成為關注的焦點。

Bernstein 和 Vazirani 闡述的擴展自Church–Turing的論文,斷言任何合理的模型都可以由圖靈機有效的模擬。

 

Data availability

數據可用性

用於本次研究形成和分析的數據庫可在我么公開的樹妖(Dryad)倉庫上獲得 (https://doi.org/10.5061/dryad.k6t1rj8)。

 

在線內容

 任何方法、額外參考、自然研究的報告摘要、源數據、擴展數據、補充信息、確認書、同行評審信息;作者貢獻和利益衝突的詳細信息; 以及數據和代碼可用性均可在 https://doi.org/10.1038/s41586-019-1666-5 得到

 

初次嘗試翻譯,錯誤之處必不在少,歡迎批評指正

附:

1)英文論文下載:  

2)

 

*****************************************************************************************************

精力有限,想法太多,專註做好一件事就行

  • 我只是一個程序猿。5年內把代碼寫好,技術博客字字推敲,堅持零拷貝和原創
  • 寫博客的意義在於鍛煉邏輯條理性,加深對知識的系統性理解,鍛煉文筆,如果恰好又對別人有點幫助,那真是一件令人開心的事

*****************************************************************************************************

 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步”網站設計“幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※試算大陸海運運費!

甲烷排放嚴重低估 研究:石油天然氣危害氣候 比預期還糟

環境資訊中心綜合外電;姜唯 編譯;林大利 審校

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步”網站設計“幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※試算大陸海運運費!

堆肥葬更環保 美各州搶立法通過

摘錄自2020年2月17日台灣醒報報導

堆肥葬即將成為新的喪葬趨勢!Recompose公司16日發表聲明,藉由6位志願者遺體的實驗測試,證實利用遺體堆肥不會生成有害物質。當前美國多州正考慮將堆肥葬合法化。

根據華盛頓州立大學教授卡彭特・伯格斯表示,在人體分解的最後階段加入混合木屑等營養材料,能讓微生物發揮更大效用。最後再加溫至攝氏55度消毒殺菌,分解後的土壤即可作為堆肥使用。

據《科學新聞》週刊報導,Recompose公司創始人卡特李娜・斯派德在報告中特別表明,堆肥葬的有機降解相對於火葬,可以減少1.4噸的碳排放量,只使用火化所需能源的8分之 1。而相對於土葬,能夠大幅縮小土地使用空間,考慮土葬的棺材用料和成本,也降低碳足跡與喪葬費用。雖然堆肥葬不如火葬費用便宜,但廣泛運用後價格會有變低趨勢。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步”網站設計“幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※試算大陸海運運費!

武漢肺炎延燒 泰非政府組織籲關野生動物市場

摘錄自2020年02月26日中央社報導

武漢肺炎蔓延全球,野生動物被懷疑是可能的傳染源。泰國非政府組織(NGO)今(26日)發布報告,呼籲大眾停止購買野生動物,亞洲各國政府應關閉所有野生動物交易市場。

泰國非政府組織自由地(Freeland)與卓越分析中心販運部門(Analytical Center of Excellence on Trafficking)發布「東南亞的野生動物販運:演化、軌跡和如何組織販運」報告,提出上述呼籲。

自由地創辦人蓋爾斯特(Steven Galster)在記者會中指出,野生動物交易衍生的疾病風險問題,不只在中國,也不會只在武漢肺炎。緬甸、越南和泰國都賣野生動物,例如穿山甲、烏龜、猴子等。

自由地執行經理馬占達(Onkuri Majumdar)指出,大家關注2019年冠狀病毒疾病(COVID-19,武漢肺炎)可能是蝙蝠或穿山甲傳染給人類。但不要忘記,嚴重急性呼吸道症候群(SARS)、禽流感、伊波拉病毒(Ebola Virus)甚至愛滋病毒都是由動物傳給人類,撲殺這些動物並不是解決的辦法。她呼籲各國政府關閉野生動物交易市場,大眾停止購買野生動物。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步”網站設計“幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※試算大陸海運運費!

Spring註解@Configuration是如何被處理的?

從SpringApplication開始

一般情況下啟動SpringBoot都是新建一個類包含main方法,然後使用SpringApplication.run來啟動程序:

@SpringBootApplication
public class AutoConfigApplication {

    public static void main(String[] args){
        ConfigurableApplicationContext configurableApplicationContext = SpringApplication.run(AutoConfigApplication.class,args);
    }
}

SpringApplication.run接收兩個參數分別為:primarySource、運行參數(args),上面的代碼使用AutoConfigApplication.class作為primarySource。SpringApplication還有一個實例方法也叫run,SpringBoot的大部分啟動都由實例run方法來完成的,其中構造ApplicationContext由createApplicationContext方法完成:

protected ConfigurableApplicationContext createApplicationContext() {
        Class<?> contextClass = this.applicationContextClass;
        if (contextClass == null) {
            try {
                switch (this.webApplicationType) {
                case SERVLET:
                    contextClass = Class.forName(DEFAULT_SERVLET_WEB_CONTEXT_CLASS);
                    break;
                case REACTIVE:
                    contextClass = Class.forName(DEFAULT_REACTIVE_WEB_CONTEXT_CLASS);
                    break;
                default:
                    contextClass = Class.forName(DEFAULT_CONTEXT_CLASS);
                }
            }
            catch (ClassNotFoundException ex) {
                throw new IllegalStateException(
                        "Unable create a default ApplicationContext, please specify an ApplicationContextClass", ex);
            }
        }
        return (ConfigurableApplicationContext) BeanUtils.instantiateClass(contextClass);
    }

createApplicationContext根據this.webApplicationType來構造ApplicationContext,不同的環境都會使用不同的實例,但本文非web環境所有構造的時候會使用AnnotationConfigApplicationContext類。創建AnnotationConfigApplicationContext的時候會調用默認構造方法

public AnnotationConfigApplicationContext() {
    this.reader = new AnnotatedBeanDefinitionReader(this);
    this.scanner = new ClassPathBeanDefinitionScanner(this);
}

AnnotationConfigApplicationContext默認構造函數創建兩個對象:

  • reader(AnnotatedBeanDefinitionReader):用於手動註冊bean
  • scanner(ClassPathBeanDefinitionScanner): 用於掃描Component、Repository、Service等註解

AnnotatedBeanDefinitionReader和ClassPathBeanDefinitionScanner會註冊一些註解處理器,註冊的方式都是使用AnnotationConfigUtils的registerAnnotationConfigProcessors方法

public static Set<BeanDefinitionHolder> registerAnnotationConfigProcessors(
            BeanDefinitionRegistry registry, @Nullable Object source) {

        ...
        
        if (!registry.containsBeanDefinition(CONFIGURATION_ANNOTATION_PROCESSOR_BEAN_NAME)) {
            RootBeanDefinition def = new RootBeanDefinition(ConfigurationClassPostProcessor.class);
            def.setSource(source);
            beanDefs.add(registerPostProcessor(registry, def, CONFIGURATION_ANNOTATION_PROCESSOR_BEAN_NAME));
        }
        ...
        return beanDefs;
    }

最終AnnotationConfigApplicationContext構造方法執行完成后ApplicationContext會有以下BeanDefinition:

構造完ApplicationContext后SpringApplicaiton緊接着會加載primarySource,上面提到 過primarySource是在運行的時候傳遞進來的(AutoConfigApplication.class),加載過程中不貼代碼了,只要知道最終ApplicaitonContext中會多一個AutoConfigApplication的BeanDefinition:

小結

總的來說SpringApplicaiton主要幹了這些事:

  • 創建AnnotationConfigApplicationContext
  • 加載一些處理註解的后處理器如:ConfigurationClassPostProcessor
  • primarySource加載進ApplicationContext

最重要的一點是,現在是有一個AnnotationConfigApplicationContext裡面包含了primarySource(AutoConfigApplication)以及ConfigurationClassPostProcessor。打個斷點在ApplicaitonContext刷新之前打印下context中的bean的名稱,可以確定這樣說沒毛病!

@Configuration啥時候被解析?

雖說有了primarySource和ConfigurationClassPostProcessor后處理器,還是需要有個執行的入口。ConfigurationClassPostProcessor是BeanDefinitionRegistryPostProcessor的實現類,BeanDefinitionRegistryPostProcessor會在ApplicationContext的refresh操作時被處理:

public void refresh() throws BeansException, IllegalStateException {
        synchronized (this.startupShutdownMonitor) {
            ...
            invokeBeanFactoryPostProcessors(beanFactory);
            ...
        }
}
    
public static void invokeBeanFactoryPostProcessors(
            ConfigurableListableBeanFactory beanFactory, List<BeanFactoryPostProcessor> beanFactoryPostProcessors) {
        
        ...
        //找出所有類型為BeanDefinitionRegistryPostProcessor的bean的名稱
        String[] postProcessorNames =
                    beanFactory.getBeanNamesForType(BeanDefinitionRegistryPostProcessor.class, true, false);
        for (String ppName : postProcessorNames) {
            if (beanFactory.isTypeMatch(ppName, PriorityOrdered.class)) {
                currentRegistryProcessors.add(beanFactory.getBean(ppName, BeanDefinitionRegistryPostProcessor.class));
                processedBeans.add(ppName);
            }
        }
        sortPostProcessors(currentRegistryProcessors, beanFactory);
        registryProcessors.addAll(currentRegistryProcessors);
        //執行BeanDefinitionRegistryPostProcessor
        invokeBeanDefinitionRegistryPostProcessors(currentRegistryProcessors, registry);
        ...
}

private static void invokeBeanDefinitionRegistryPostProcessors(
        Collection<? extends BeanDefinitionRegistryPostProcessor> postProcessors, BeanDefinitionRegistry registry) {

    for (BeanDefinitionRegistryPostProcessor postProcessor : postProcessors) {
        //調用postProcessBeanDefinitionRegistry方法
        postProcessor.postProcessBeanDefinitionRegistry(registry);
    }
}   

invokeBeanDefinitionRegistryPostProcessors會調用BeanDefinitionRegistryPostProcessor的postProcessBeanDefinitionRegistry方法,通過斷點調試工具確認下ConfigurationClassPostProcessor有沒有在這一步被處理:

調試輸出postProcessors集合裏面有一個了ConfigurationClassPostProcessor元素,說明了ConfigurationClassPostProcessor的執行入口沒有問題。

ConfigurationClassPostProcessor處理器

ConfigurationClassPostProcessor首先會判斷在ApplicationContext中的bean是否被@Configuration註解標記,然後使用ConfigurationClassParser來解析@Configuration,ConfigurationClassPostProcessor的解析@Configuration的大致流程:

  1. 使用ConfigurationClassUtils.checkConfigurationClassCandidate檢查BeanDefinition是否@Configuration註解標記
  2. 對@Configuration進行排序
  3. 使用ConfigurationClassParser解析@Configuration註解的信息
  4. 使用ConfigurationClassBeanDefinitionReader解析BeanDefinition
public void processConfigBeanDefinitions(BeanDefinitionRegistry registry) {
        List<BeanDefinitionHolder> configCandidates = new ArrayList<>();
        
        //獲取所有BeanDefinitio名稱
        String[] candidateNames = registry.getBeanDefinitionNames();
        
        for (String beanName : candidateNames) {
            BeanDefinition beanDef = registry.getBeanDefinition(beanName);
            //如果是full、lite則說明已經處理過的類
            if (ConfigurationClassUtils.isFullConfigurationClass(beanDef) ||
                    ConfigurationClassUtils.isLiteConfigurationClass(beanDef)) {
                if (logger.isDebugEnabled()) {
                    logger.debug("Bean definition has already been processed as a configuration class: " + beanDef);
                }
            }
            //檢查BeanDefinition是否有@Configuration註解
            else if (ConfigurationClassUtils.checkConfigurationClassCandidate(beanDef, this.metadataReaderFactory)) {
                configCandidates.add(new BeanDefinitionHolder(beanDef, beanName));
            }
        }

        //如果沒有找到@Configuration標記的類,則返回不作處理也
        if (configCandidates.isEmpty()) {
            return;
        }

        //對@Configuration進行排序
        configCandidates.sort((bd1, bd2) -> {
            int i1 = ConfigurationClassUtils.getOrder(bd1.getBeanDefinition());
            int i2 = ConfigurationClassUtils.getOrder(bd2.getBeanDefinition());
            return Integer.compare(i1, i2);
        });
        
        ...
  
        ConfigurationClassParser parser = new ConfigurationClassParser(
                this.metadataReaderFactory, this.problemReporter, this.environment,
                this.resourceLoader, this.componentScanBeanNameGenerator, registry);

        Set<BeanDefinitionHolder> candidates = new LinkedHashSet<>(configCandidates);
        Set<ConfigurationClass> alreadyParsed = new HashSet<>(configCandidates.size());
        do {
            //解析@Configuration class
            parser.parse(candidates);
            parser.validate();

            Set<ConfigurationClass> configClasses = new LinkedHashSet<>(parser.getConfigurationClasses());
            configClasses.removeAll(alreadyParsed);

            //讀取BeanDefinition
            if (this.reader == null) {
                this.reader = new ConfigurationClassBeanDefinitionReader(
                        registry, this.sourceExtractor, this.resourceLoader, this.environment,
                        this.importBeanNameGenerator, parser.getImportRegistry());
            }
            this.reader.loadBeanDefinitions(configClasses);
            alreadyParsed.addAll(configClasses);

            candidates.clear();
            ...
        }
        while (!candidates.isEmpty());
        ...
    }

最後還是通過調試工具看一下示例中的的啟動類AutoConfigApplication沒有被處理:

圖上显示configCandidates中有一個名稱為autoConfigApplication的BeanDefinition的元素,說明AutoConfigApplication會被當作配置類解析,但是AutoConfigApplication並沒有使用@Configuration註解,為什麼還會被當做配置類呢?其實@Configuration在@SpringBootApplication註解中:

紅色背景列出來的就是@Configuration註解,它是@SpringBootConfiguration的元註解。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步”網站設計“幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※試算大陸海運運費!

【原創】使用批處理腳本自動生成並上傳NuGet包

  Hello 大家好,我是TANZAME,我們又見面了。

  NuGet 是什麼這裏就不再重複啰嗦,園子里一搜一大把。今天要跟大家分享的是,在日常開發過程中如何統一管理我們的包,如何通過批處理腳本生成包並自動上傳到 NuGet。在實際項目開發過程中我們要上傳自己的包,一般的步驟都是:nuget spec => nuget pack => nuget push,一個包都要至少重複三個動作,如果有 N 個包那就要重複 N*3 次,想想都不能忍,所以便有了今天的分享主題。

  • 生成目錄

  既然是統一管理,生成的包自然是放在同一個文件夾,而不是分散在各個 .proj 目錄里。這裏我們在解決方案所在目錄新建一個目錄,這樣做的目的是方便 bat 腳本找到解決方案下面的子項目。比如我這裏新建的是 .nuget 這個目錄,需要注意的是如果目錄名稱有特殊字符的話不能直接右鍵新建,需要用命令提示符,直接在解決方案所在目錄使用快捷鍵 SHIFT + 右鍵 就能直接打開命令提示符,這樣可以省去一大堆 cd 的操作。

 

  • 下載 NuGet

  到 NuGet 官網下載命令行接口(CLI)。nuget.exe提供了完整的 nuget 功能, 可用於安裝、創建、發布和管理包, 而無需對項目文件進行任何更改。

  1. 請訪問 ,並選擇 NuGet 3.3 或更高版本(2.8.6 與 Mono 不兼容)。 始終建議使用最新版。若要將包發布到 nuget.org,版本至少必須是 4.1.0。
  2. 每次下載都直接下載 nuget.exe 文件。 讓瀏覽器將文件保存到選定文件夾。 此文件不 是安裝程序;如果直接在瀏覽器中運行,就不會看到任何內容。
  3. 將文件夾添加到 nuget.exe 中放置 PATH 環境變量的位置,這樣就可以從任意位置使用 CLI 工具。這裏我們把它放在上一步新建的 .nuget 文件夾下面,並設置 PATH 環境變量。

 

  • 生成清單

  是包含包元數據的 XML 清單, 此清單同時用於生成包以及為使用者提供信息。這個清單文件我們只需要生成一次,以後都不需要再重新生成。 .net Core 和使用sdk 特性.NET Standard 項目不需要 .nuspec 文件,如果是.net Core 和使用sdk 特性.NET Standard 項目則忽略此步驟。轉到項目所在目錄,SHIFT + 右鍵 調出命令提示符,輸入 nuget spec 命令即可生成我們所需要的包元數據清單。

 

  將這個清單文件剪切到第一步新建的 .nuget 文件夾,剪切過去後項目下面就不會憑空多出一個文件,看着清爽多了。然後做一下調整填入我們自己項目的相關信息, 比如像下面這樣:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
  <metadata>
    <id>TZM.XFramework</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>$author$</authors>
    <owners>$author$</owners>
    <license type="expression">Apache-2.0</license>
    <projectUrl>https://github.com/TANZAME/TZM.XFramework</projectUrl>
    <iconUrl>http://go.microsoft.com/fwlink/?LinkID=386613</iconUrl>
    <description>TZM.XFramework is a lightweight and high performance object-relational mapper for .NET use the original Entity Framework api.</description>
    <copyright>Copyright 2019</copyright>
    <tags>.NET SqlServer MSSQL Database Data O/RM ADO.NET</tags>
    <repository type="git" url="https://github.com/TANZAME/TZM.XFramework" />
    <dependencies />
    <frameworkAssemblies>
      <frameworkAssembly assemblyName="System.Data"/>
      <frameworkAssembly assemblyName="System.ComponentModel.DataAnnotations"/>
      <frameworkAssembly assemblyName="System.Net.Http"/>
    </frameworkAssemblies>
  </metadata>
</package>

 

  • 編寫腳本

  在第一步新建的文件夾里新建一個 bat 文件,重命名為 package.bat,接下來編寫我們的自動腳本。完整 bat 腳本,直接上代碼片段。

  1. 這裏我設置 nuget pack 包屬性為Release,並且不自動生成,所以需要先在 Release 模式下編譯完成再運行腳本。加上 -Build 參數的話輸出的信息太多看得賊難受,這裏把它去掉,我們自己手動編譯。
  2. 填充api_key。去 nuget 官網 登錄自己的帳號並創建一個 key,複製粘貼到 api_key 變量。
  3. 注意 .net framework 項目(fx)和 .net core 項目使用的命令不一樣
  4. 至此我們所有的準備步驟都已完成,雙擊 package.bat 運行腳本,解放雙手。
@echo off
set api_key=xxxxxxlef2j57rw4q26qcrvycvznyvcurgfxbzxxxxxxxx
set source_api_uri=https://api.nuget.org/v3/index.json
set startup_dir=%~dp0
cd ..\
set startup_dir=%cd%
cd .nuget

:: 打包 TZM.XFramework -Build
echo pack TZM.XFramework
copy TZM.XFramework.nuspec %startup_dir%\net45\TZM.XFramework
nuget pack %startup_dir%\net45\TZM.XFramework\TZM.XFramework.csproj -Properties Configuration=Release
del %startup_dir%\net45\TZM.XFramework\TZM.XFramework.nuspec
echo=

:: 打包 TZM.XFrameworkCore
echo pack TZM.XFrameworkCore
dotnet pack --no-build --configuration Release --output %startup_dir%\.nuget\ %startup_dir%\netcore\TZM.XFrameworkCore\TZM.XFrameworkCore.csproj

:: 批量推送包
for /R %cd% %%f in (*.nupkg) do ( 
echo=
dotnet nuget push %%f -k %api_key% -s %source_api_uri%
)

echo=
pause

  最後貼一張最終運行的效果圖:

  • 總結

   通過這個腳本,我們可以在一個文件夾里統一管理我們的包,做到一鍵生成、上傳同時保持項目文件的清爽,嗯簡直不要太方便 ~..~

   參考資料:

   技術交流群:816425449

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步”網站設計“幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※試算大陸海運運費!

防野火再度釀災 澳洲科學家開發預測衛星

摘錄自2020年3月4日中央通訊社報導

澳洲國立大學(Australian National University)今天(4日)表示,校內研究團隊正在開發一枚「鞋盒大小」的衛星,運用紅外線偵測器來測量森林覆蓋面積和空氣濕度,盼獲得的資料能協助判斷很可能爆發野火的地點,及野火可能難以控制的地點。不過,距離正式啟用大概還要5年時間。

澳洲國立大學在聲明中說,這項科技將「專門用來偵測澳洲植被和林區的變化,例如針對易燃的尤加利樹」。

遙測專家耶夫拉(Marta Yebra)表示,新衛星收集到的資料將提供給消防人員。:「這項紅外線科技和首次能夠取得的資料,將有助控制特定起火點,進而降低野火發生的頻率、嚴重程度,及對澳洲民眾、經濟和環境帶來的長遠影響。」

研究人員指出,全球暖化正造成澳洲夏天時期更長,且爆發野火的危險越來越高。原因是冬天縮短,使得預防野火的工作更難執行。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步”網站設計“幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※試算大陸海運運費!

搶救PM2.5!台中祭出高額電動車換購補貼

台中市政府持續推動低碳城市。為降低空氣汙染與PM2.5威脅,台中市環保局今年針對換購電動車推出加碼補助金,最高補助金額達新台幣3.3萬元,為全台最高。

目前台中市掛牌行駛的二行程機車有約25.4萬輛,其汙染較四行程機車而言,碳氫化合物高了17倍、一氧化碳也高了2倍。若改換成電動機車,每輛每年可減少0.149公斤的PM2.5與0.203公斤的PM10。為加速推動低碳城市、降低汽機車廢氣污染,台中市政府持續增建電動車充電站,目前已有203座;同時也祭出高額補貼,鼓勵民眾換購電動車。

台中市環保局表示,擁有中低收入戶證明、且二行程機車設籍於台中的台中市居民,汰換具有台灣電動機車認證(TES)核可的重型電動機車,最高可享新台幣3.38萬元的補助;小型與輕型電動機車最高補助則為3.18萬元。若是汰舊、換購電動自行車或電動輔助自行車,最高也有1.3萬元補助,皆為全台最高。

此外,一般台中市民新購置電動機車,最高可享有新台幣2.3萬補助;電動自行車或電動輔助自行車的貼最高6,000元。汰換舊的二行程機車獎勵金2,500元。上述相關補助都有名額限制,從3月14日開始受理申請。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步”網站設計“幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※試算大陸海運運費!

Zabbix-(三)監控主機CPU、磁盤、內存並創建監控圖形

Zabbix-(三)監控主機CPU、磁盤、內存並創建監控圖形

一.前言

前文中已經講述了兩種方式對Zabbix的搭建,本文將講述如何在zaibbx上添加需要監控的主機,以及使用Zabbix自帶模板和自定義模板對主機的CPU、磁盤、內存進行監控,並觸發問題,並且在Zabbix儀錶盤創建實時監控圖形。

準備

  • Zabbix Server (Zabbix 4.4) (ip:192.168.152.140)
  • 被監控主機A (Centos7.6),下文簡稱 Server-A (ip:192.168.152.142)
  • 被監控主機B (Centos7.6),下文簡稱 Server-B (ip:192.168.152.143)

二.為被監控主機安裝zabbix-agent

  1. Server-A、Server-B分別安裝zabbix-agent

    # rpm -Uvh https://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm
    
    # yum install -y zabbix-agent

  2. Server-A、Server-B配置zabbix-agent

    # vim /etc/zabbix/zabbix_agentd.conf

    修改以下配置:

    • Server-A的zabbix_agentd.conf
    Server=192.168.152.140
    ServerActive=192.168.152.140
    
    # Hostname要與在Zabbix界面配置的Hostname(主機名稱)保持一致
    Hostname=Server-A
    • Server-B的zabbix_agentd.conf
    Server=192.168.152.140
    ServerActive=192.168.152.140
    
    # Hostname要與在Zabbix界面配置的Hostname(主機名稱)保持一致
    Hostname=Server-B

  3. 分別啟動zabbix-agent

    # systemctl start zabbix-agent

    可以查看agent日誌

    # tailf /var/log/zabbix/zabbix_agentd.log

    可能會出現以下內容,是由於zabbix界面上沒有配置主機,接下來將在zabbix頁面上進行主機配置

      6981:20191030:111132.151 no active checks on server [192.168.152.140:10051]: host [Server-A] not found

三.Zabbix添加主機

通過頁面操作,將需要監控的主機添加到zabbix中

  1. 登錄Zabbix,默認賬號:Zabbix,默認密碼:admin (可在zabbix數據庫 users表查詢)

  2. 點擊【配置】-【主機】-【創建主機】,添加需要被監控的主機

    首先配置【主機】信息,添加Server-A,輸入配置項

    配置項
    * 主機名稱 Server-A
    可見的名稱 Server-A
    * 群組 Linux servers (進行選擇)
    * agent代理程序的接口 IP地址: 192.168.152.142 端口: 10050

    再配置【模板】信息,點擊【添加】,選擇群組 Templates,勾選 Template OS Linux by Zabbix agent,點擊【選擇】

    最後點擊【保存】

  3. 在【主機】頁面可以看到Server-A已經成功添加了

    同時,Server-A的zabbix-agent日誌也不再打印

    注: 由於在之前在安裝Zabbix server時,也在zabbix server上安裝了zabbix-agent,因此圖例上除了Server-A主機以外,還有zabbix server主機

  4. 通過全克隆添加主機Server-B

    選擇需要複製的主機Server-A

    點擊【全克隆】(full clone)

    修改主機名稱agent IP地址等信息

    修改配置項
    *主機名稱 Server-B
    *agent IP 192.168.152.143

    最後點擊【添加】,等待Server-B與zabbix server建立通信

四.創建自定義模板(Template)

在添加主機步驟中,添加了2台需要監控的主機,添加監控項時也可以給每台主機單獨添加監控項,但是隨着主機數量增多,就會出現過多重複的操作,因此可以使用zabbix的Templates(模板)Items(監控項Triggers(觸發器)等眾多配置定義在模板中,將主機鏈接到定義好的模板上,就可以免去重複的操作。

下面將自定義模板,定義監控磁盤剩餘空間監控項,並配置觸發器當磁盤剩餘空間低於一定閾值時觸發告警。

  1. 創建自定義模板

    點擊【配置】-【模板】-【創建模板】

  2. 輸入模板信息,完成後點擊【添加】

    配置項
    * 模版名稱 Template Disk Free Size
    可見的名稱 Template Disk Free Size
    * 群組 Linux servers (選擇)
    描述 自定義磁盤剩餘空間模板

    注: 讀者也可以自定義一個群組,並在自定義群組中創建模板,這個步驟本文不再示範

五.創建磁盤剩餘空間監控項和觸發器

  1. 創建自定義磁盤監控項(Item)

    進入自定義模板的監控項模塊

    點擊【創建監控項】

    輸入監控參數

    配置項
    * 名稱 磁盤剩餘空間監控項
    類型 Zabbix 客戶端
    * 鍵值 vfs.fs.size[/,free]
    單位 B
    ……其他配置項 根據需要填寫

    這裏的鍵值 vfs.fs.size[/,free]是指,監控根路徑下,空餘的磁盤大小

    點擊【添加】

    注:創建監控項(Items)可以參考, 更多的鍵值(Keys)可以參考

  2. 創建觸發器(Trigger)

    觸發器可以配置當監控項監控到的數據達到一定閾值,從而觸發問題。

    在Template Disk Free Size模板中選擇【觸發器】,點擊【創建觸發器】

    輸入觸發器參數

    配置項
    * 名稱 磁盤剩餘空間觸發器
    嚴重性 嚴重(選擇)
    * 表達式/問題表現形式 {Template Disk Free Size:vfs.fs.size[/,free].last()}<15000000000 (可通過選擇監控項)
    事件成功迭代 恢復表達式(選擇)
    * 恢復表達式 {Template Disk Free Size:vfs.fs.size[/,free].last()}>=15000000000
    問題事件生成模式 多重(選擇)

    表達式/問題表示形式

    選擇已配置的磁盤剩餘空間監控項

    配置結果 < 15000000000, 監控項中單位為B,這裏15GB換算成15000000000B

    點擊【插入】,可以看到如下錶達式,表達式意思是,當檢測到磁盤弓箭剩餘不足15GB時,將觸發問題

    {Template Disk Free Size:vfs.fs.size[/,free].last()}<15000000000

    因此可以直接輸入問題恢復表達式,即磁盤剩餘空間高於15GB時,恢復問題

    {Template Disk Free Size:vfs.fs.size[/,free].last()}>=15000000000

    點擊【添加】

    再將該自定義模板,鏈接到Server-A、Server-B主機的模板中,參考,不過在篩選模板時,群組要選擇Linux servers(與創建模板時群組保持一致),添加後點擊【更新】

    進入【配置】-【主機】-【Server-A】(或者 Server-B)-【監控項】中,可以搜索到磁盤剩餘空間監控項已經添加成功

    注:如果監控項狀態不為【已啟動】可以查看zabbix server日誌進行排查

  3. 測試一下

    當前Server-A主機磁盤剩餘空間,為15G

    上傳一些文件到Server-A,此時磁盤剩餘空間為14G

    等待Zabbix監控到Server-A磁盤變化,查看儀錶盤,出現問題,配置成功

    刪除Server-A大文件,等待Zabbix監控到主機磁盤恢復,儀錶盤問題恢復

六.監控CPU空閑率

在添加主機時,由於已經鏈接了模板(該模板還鏈接了Template Module Linux CPU by Zabbix agent等若干個其他模板),Template Module Linux CPU by Zabbix agent模板自帶了許多監控項,其中包括CPU idle time 監控項,因此可以直接使用該監控項監控主機CPU空閑率數值,無需自定義監控項,只需要添加一個觸發器(Trigger)來讀取監控項觸發告警即可。

注: zabbix自帶模板中,有許多監控項可以直接利用起來,無需再單獨創建監控項,使用時可先在已有模板中查找下可用的監控項。

  1. 使用自帶模板中監控項

    直接使用CPU idle time 監控項即可,可以在【配置】-【主機】,【Server-A】的【監控項】中搜索到該監控項(在下圖中可以看到該監控項鏈接了模板)

  2. 在已有模板中添加觸發器(trigger)

    這裡在模板Template Module Linux CPU by Zabbix agent添加一個觸發器。

    點擊【配置】-【模板】搜索模板Template Module Linux CPU by Zabbix agent,並進入【觸發器】配置

    創建觸發器操作流程參考上面步驟中的,這裏說明一下配置參數

    配置項
    * 名稱 CPU空閑率觸發器
    嚴重性 嚴重 (選擇)
    表達式/問題表現式 {Template Module Linux CPU by Zabbix agent:system.cpu.util[,idle].avg(5m)}>=80
    事件成功迭代 恢復表達式(選擇)
    * 恢復表達式 {Template Module Linux CPU by Zabbix agent:system.cpu.util[,idle].avg(5m)}<80

    表達式/問題表現式:表示在5分鐘內CPU平均空閑率如果高於80%,那麼將觸發問題

    添加表達式示例:

    system.cpu.util[,idle]官方說明

    注:這裏修改了zabbix自帶的模板(Template Module Linux CPU by Zabbix agent),為其添加了一個新的觸發器,在實際使用中,要謹慎操作,因為鏈接了該模板的主機觸發器都會被修改,因此實際使用中需要對這種操作進行評估。

  3. 測試一下

    等待5分鐘,Zabbix server、Server-A、Server-B的CPU空閑率都高於80%,Dashboard界面觸發了問題,由於Zabbix server主機也鏈接了模板,因此修改Template Module Linux CPU by Zabbix agent模板,Zabbix server的CPU空閑率也被監控,所以在修改模板時要。

七.監控內存佔用率

在上面的步驟中添加了磁盤剩餘空間、CPU空閑率監控,直接使用了Zabbix 客戶端類型的監控項的鍵值,但是有些監控項可能不能直接獲取,需要通過計算的方式來獲取,例如監控內存佔用率,雖然可以使用vm.memory.size這個鍵值,但是得到值並不是我們所期望的,參考下面官方的解釋,雖然mode中有pused (used, percentage),但是“used”=”total – free”“available”=”free + buffers + cached”(內核版本Linux<3.14),實際是想要的值:

(available - total) / total

因此需要使用可計算的鍵值類型

官方對vm.memory.size以及參數解釋:

  1. 在Template OS Linux by Zabbix agent模板新增監控項

    配置項
    * 名稱 內存佔用率監控項
    類型 可計算的
    * 鍵值 memory.utilization (自定義)
    * 公式 100*(last(“vm.memory.size[total]”)-last(“vm.memory.size[available]”))/last(“vm.memory.size[total]”)
    信息類型 浮點數
    單位 %
    ……其他配置項 默認即可

    自定義鍵值可自己輸入,具體規則參考官方

這裏就不再創建觸發器了,感興趣的讀者可以自行創建,可參考上面的

八.Dashboard創建圖形

可以在首頁儀錶盤裡創建圖形,實時查看監控項的數據值。

  1. 回到zabbix首頁,點擊【編輯儀錶盤】-【添加構件】

  2. 創建磁盤剩餘空間圖形

    輸入基本信息

    添加【主機】和【監控項】

    左邊一欄選擇主機Server-A,右邊一欄選擇Server-A的磁盤監控項

    再【添加新數據集】,同樣操作將Server-B的磁盤監控也添加到圖形中

  3. 添加CPU空閑率圖形

    按照,添加Server-A,Server-B的CPU空閑率圖形

  4. 添加內存佔用率圖形

    同樣按照,添加Server-A,Server-B的內存佔用率圖形

  5. 保存設置並在儀錶盤中查看

    點擊【保存設置】

    在儀錶盤頁面查看圖形

九.參考文檔

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步”網站設計“幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※試算大陸海運運費!