<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 41  文章 - 7  trackbacks - 0
    <2016年7月>
    262728293012
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    在本章中,我們將涵蓋下面的主題:
    1. 監控RabbitMQ的行為
    2. 使用RabbitMQ進行故障診斷
    3. 跟蹤RabbitMQ當前活動
    4. 調試RabbitMQ的消息
    5. 當RabbitMQ重啟失敗時該做什么
    6. 使用Wireshark來調試
    介紹
    每當我們開發一個應用程序的時候,一種常見的做法是開發一個診斷基礎設施. 這可以基于日志文件,SNMP 轉移以及其它手段.
    RabbitMQ提供了標準日志文件和內建消息故障診斷解決方案.
    在前面三個食譜中,我們將看到如何來使用這三種特性.
    某些時候,會存在一些阻止RabbitMQ啟動的問題.在這種情況下,需要強制解決服務器上的問題并重啟服務器。這一點,我們將在RabbitMQ重啟失敗時該做什么食譜中講解。

    然而,調試消息也是應用程序開發的一部分.在這種情況下,我們需要知道RabbitMQ和客戶之間交換的準確信息.可以使用一個內建代理工具(Java client API的一部分) (查看調試RabbitMQ的消息食譜)或者使用高級網絡監視工具來檢查網絡狀況,正如我們將在使用Wireshark來調試食譜中看到的一樣。
    監控RabbitMQ行為
    為了檢查RabbitMQ的正常行為,有一個監控工具是很有用的,特別是在處理集群的時候.
    有許多不同的工具,商業的或免費的, 
    這有助于讓它們受控于分布式系統如Nagios、Zabbix之下.
    在本食譜中,我們將展示如何配置Ganglia  RabbitMQ 插件(http://sourceforge.net/apps/trac/ganglia/wiki/ganglia_quick_start).
    準備
    為了運行此食譜,你需要啟用管理插件來配置RabbitMQ。同時,你也需要安裝和配置Ganglia. 在本食譜中,我們使用的版本是3.6.0.
    如何做
    為了使用Ganglia監控圖形來查看RabbitMQ統計數據,你需要執行下面的步驟:
    1. 在你的Linux發行版上,使用yum或apt-get安裝和配置Ganglia.你需要下面的包:
    ganglia-gmetad
    ganglia-gmond
    ganglia-gmond-python
    ganglia-web
    ganglia
    2. 從https://github.com/ganglia/gmond_python_modules/blob/master/rabbit/python_modules/rabbitmq.py拷貝Python Ganglia監控插件到/usr/lib64/ganglia/python_modules.
    3. 從https://github.com/ganglia/gmond_python_modules/blob/master/rabbit/conf.d/rabbitmq.pyconf拷貝Python Ganglia 配置文件到/etc/ganglia/conf.d 

    4. 檢查配置文件中的參數正確性.實際上, 你可能需要通過只留下默認的虛擬主機來解決以下條目:
    paramvhost {
    value = "/"
    }
    5.如果它已經運行了,使用下面的命令來重啟gmond:
    service gmond restart

    如何工作
    通過這個食譜, 你可以從Ganglia環境中來監控RabbitMQ.
    TIP
    對于基本的故障診斷,你可以通過日志文件來進行,默認情況下,日志文件存儲于/var/log/rabbitmq.

    一旦它運行起來,你就可以從同一個web界面中,看到系統信息和RabbitMQ節點、隊列的相關信息,如下面的截圖所示:


    更多
    Ganglia是集群監測一種廣泛的解決方案,但不是唯一的一個。其它的解決方案還包括Nagios (www.nagios.org), Zabbix (www.zabbix.com), 以及Puppet (puppetlabs.com).

    通過RabbitMQ排除故障
    正如前面食譜提到的, 我們可以通過一種便利的方式,即以日志文件的方式來監控RabbitMQ行為.
    也可以使用RabbitMQ自身來訪問同種信息, 通過向AMQP client通知broker的活動.


    準備
    要運行本食譜,我們需要運行RabbitMQ以及Java client library.
    如何做
    為了消費日志消息,你可在Consumer.java中執行主方法.你可在Chapter12/Recipe02/Java/src/rmqexample中找到源友. 下面,我們將高亮主要步驟:
    1. 創建一個臨時匿名隊列,并將其綁定到AMQP log交換器:
    String tmpQueue = channel.queueDeclare().getQueue();
    channel.queueBind(tmpQueue,"amq.rabbitmq.log","#");
    2. 在消費者回調(ActualConsumer.java)中,可以檢索消息和每個消息的路由鍵,并將它們打印出來:
    String routingKey = envelope.getRoutingKey();
    String message = new String(body);
    System.out.println(routingKey + ": " + message);
    3. 此時,你可以在broker上執行任何RabbitMQ操作,并且你會看到日志輸出到標準輸出上。


    如何工作
    RabbitMQ log交換器amq.rabbitmq.log是一個topic交換器,RabbitMQ自身用來發布其日志消息.
    在我們的示例代碼中,我們使用#通配符來消費所有topics的消息.
    例如,通過運行另一份代碼,我們可運行同一個broker的兩個連接,然后中斷它,我們將下面的輸出:
    info: accepting AMQP connection <0.2737.0> (127.0.0.1:54698 ->127.0.0.1:5672)

    info: accepting AMQP connection <0.2753.0> (127.0.0.1:54699 ->127.0.0.1:5672)
    warning: closing AMQP connection <0.2737.0> (127.0.0.1:54698 ->127.0.0.1:5672):
    connection_closed_abruptly
    warning: closing AMQP connection <0.2753.0> (127.0.0.1:54699 ->127.0.0.1:5672):
    connection_closed_abruptly
    值得注意的是,在這里報告的信息,信息和警告不是自己的一部分,但是我們在每個開始打印的路由鍵消息(前一步驟的步驟2)。

    TIP
    如果我們只想收到警告和錯誤消息,我們可以訂閱相應的主題.

    更多
    默認情況下,日志交換器-amq.rabbitmq.log被創建在虛擬主機/中。通過在RabbitMQ配置文件中定義default_vhost從而設置其位置是可能的.

    追蹤RabbitMQ當前活動
    有時,為了分析和調試未知的應用程序行為,我們需要追蹤RabbitMQ接收和分發的所有消息.
    RabbitMQ提供追蹤這些消息的所謂的流水追蹤工具。
    追蹤活動可以在運行時啟用和禁用,并且它應該只用于調試,因為它規定了broker活動的開銷.

    準備
    要運行此食譜,我們需要運行此食譜,我們需要運行RabbitMQ和Java client library.
    如何做
    RabbitMQ使用與日志消息中同樣的機制來發送追蹤消息;因此,示例代碼與前一個食譜中的非常相似.

    為了消費追蹤消息,你可以執行Consumer.java中的主方法,你可在Chapter12/Recipe02/Java/src/rmqexample目錄中找到源碼.這里,我們高亮了主要步驟:
    1. 創建一個臨時隊列,并將其綁定到AMQP log交換器上:
    String tmpQueue = channel.queueDeclare().getQueue();
    channel.queueBind(tmpQueue,"amq.rabbitmq.trace","#");
    2.在消費者回調(ActualConsumer.java)中, 可以獲取每個消息,并使用下面的代碼打印出來:
    String routingKey = envelope.getRoutingKey();
    String message = new String(body);
    Map<String,Object> headers = properties.getHeaders();
    LongStringexchange_name = (LongString)
    headers.get("exchange_name");
    LongString node = (LongString) headers.get("node");
    ...
    3. 可從root用戶(Linux)或在RabbitMQ命令控制臺(Windows)來激活firehose,其激活命令如下:
    rabbimqctl trace_on
    4. 此時,你可以向broker啟動生產和發送消息,然后你們會在標準輸出中看到追蹤信息.
    5. 可調用下面的命令來禁用firehose:
    rabbimqctl trace_off


    如何工作 
    默認情況下,amq.rabbit.trace topic交換器不會接收任何消息,但一旦激活firehose后(前面步驟的步驟3),所有流經broker的消息將被按下面的規則拷貝:
    1.進入broker的消息,它們是通過路由鍵publish.exchange-name發布的, 這里的exchange-name是消息最初發布的交換器名稱.
    2.離開broker的消息,它們是通過路由鍵deliver.queuename發布的,這里的queue-name是消息最初被消費的隊列名稱.
    3.消息的body是從原始消息中拷貝過來的.

    4.原始消息的元數據會插入到拷貝消息的header屬性中. 在步驟2中,我們已經看到了,如何獲取最初分發消息的交換器名稱,但獲取所有原始信息也是可以的,即,找到所有可有字段,并將它們插到消息屬性中.firehose的官方文檔鏈接位于:http://www.rabbitmq.com/firehose.html.

    調試RabbitMQ消息
    有時,通過在標準輸出中記錄通過broker的消息是有用的.通過RabbitMQ Java客戶端提供的簡單應用程序來追蹤消息,也是可行的.
    準備
    要運行此食譜,你需要運行的RabbitMQ(運行標準端口 5672),以及RabbitMQ Java client library
    如何做
    RabbitMQ的Java client library中包含了一個追蹤工具,你可以按下面的步驟來進行實際使用.
    1. 從http://www.rabbitmq.com/java-client.html頁面下載最新版本的RabbitMQ Java client library.
    2. 將其解壓,并進入其目錄
    .
    3. 通過下面的命令來運行Java tracer:
    ./runjava.sh com.rabbitmq.tools.Tracer
    4. 運行用于調試Java client,并將其連接到5673端口.對于本食譜,我們可以使用包含在Java client包中的另一個Java工具,其調用如下:
    ./runjava.sh com.rabbitmq.examples.PerfTest -h amqp://localhost:5673 -C 1 -D 1

    如何工作
    追蹤工具是一個簡單的AMQP代理;默認情況下,它監聽5673端口,并會把所有的請求轉發到默認監聽5672端口的RabbitMQ broker.
    所有生產或消費的消息,如同AMQP操作一樣,都會記錄到標準輸出中.
    運行前面步驟的步驟4,我們使用了包含在Java client包中另一個用于作RabbitMQ壓力測試的工具.
    在這里,我們只是限制了生產一個消息(-C 1) 并消費它(-D 1).
    TIP
    追蹤工具只在Java client API中可用.

    更多
    可以使用下面的代碼來為Java追蹤程序傳遞更多的參數:
    ./runjava.sh com.rabbitmq.tools.Tracer listenPort connectHost connectPort
    listenPort指的是追蹤器監聽的端口(默認為5673), connectHost/connectPort (默認為localhost/5672) 是用于連接并轉發收到請求的主機和端口。
    使用下面的命令,你可以找到所有PerfTest可用選項:
    ./runjava.sh com.rabbitmq.examples.PerfTest --help


    也可參考
    在http://www.rabbitmq.com/java-tools.html中,你可以找到Java追蹤工具以及PerfTest的文檔.

    當RabbitMQ重啟失敗時,需要做什么
    偶爾情況下, RabbitMQ 可能會重啟失敗。如果broker包含持久化數據時,這是一個嚴重的問題,否則,有足夠的能力重設其持久化狀態。
    準備
    要運行此食譜,你只需要一個測試RabbitMQ broker.
    TIP
    我們將銷毀所有之前定義的數據—以避免使用生產實例.

    如何做
    要清空RabbitMQ, 可執行下面的簡單步驟:
    1. 如果RabbitMQ運行的話,停止它.
    2. 定位到Mnesia 數據庫目錄.默認是/var/lib/rabbitmq/mnesia (Linux) or %APPDATA%\RabbitMQ\db (Windows).
    3. 遞歸刪除其目錄和文件.
    4. 重啟RabbitMQ.

    如何工作
    Mnesia 數據庫包含了所有運行時的RabbitMQ定義信息: 隊列,交換器,用戶等等.
    通過刪除Mnesia數據庫 (或者通過重命名,這樣可以在需要的時候恢復某些數據), RabbitMQ會重置到出廠默認狀態,當RabbitMQ啟動時,它會創建一個新的Mnesia數據庫,并使用默認值進行初始化.


    更多
    如果broker無法在第一時間啟動,有可能是某個系統目錄存在權限問題:即要么是Mnesia數據庫目錄,要么是日志目錄,要么是某些在配置文件中指定的臨時的或自定義的目錄.
    你可以在RabbitMQ故障排除頁頁找到詳盡的列表(http://www.rabbitmq.com/troubleshooting.html).

    也可參考
    在Mnesia API 文檔頁面(http://www.erlang.org/doc/man/mnesia.html),,你可以找到更多關于如何破解Mnesia數據庫的信息.

    使用Wireshark調試
    在調試RabbitMQ消息食譜中,我們已經了解過了如何來追蹤RabbitMQ的消息.

    然而,以下情況并不總是可能的或可取的,即停止正在運行的客戶端(或RabbitMQ服務器),修改它的連接端口,指向一個不同的broker;我們只想監控正在實時傳遞的消息,影響系統的活動應該盡可能的少。

    TIP
    但是,正如在前面食譜(追蹤RabbitMQ當前活動)中看到的一樣,激活firehose是可行的 .


    Wireshark是一個免費的有能力解碼AMQP消息的網絡分析工具.
    此工具既可用在客戶段,也可以用在服務端,從而
    無縫監控AMQP交通狀況.

    準備
    要練習這個食譜,你需要運行的RabbitMQ以及RabbitMQ Java client library.

    如何做
    在下面的步驟中,我們將看到如何使用Wireshark來追蹤AMQP消息:
    1. 如果Wireshark在你的系統中尚不可用,那么需要從http://www.wireshark.org/下載和安裝Wireshark . 如果可能的話,你也可以從你的發行版中進行安裝,如:
    yum install wireshark-gnome
    2.在Linux系統中,以root用戶來啟動Wireshark.
    3.啟動從環回接口中捕獲消息.
    4.切換到Java client library路徑下,在終端中運行下面的命令:
    ./runjava.sh com.rabbitmq.examples.PerfTest -C 1 -D 1
    5.
    停止Wireshark GUI的采集,并分析抓到的AMQP交通狀況.
    如何工作
    使用Wireshark,可用于檢測AMQP交通的退出或進行一個持有RabbitMQ服務器或客戶端的服務器.
    在我們的例子中,我們捕獲了運行在同一臺機器上服務端和客戶端網絡交通狀況,因此連接是localhost中發生的.這也是為什么我們從環回接口中捕獲交通狀況的原因(前面步驟的步驟3).
    反之,我們應該從網絡接口中進行捕獲,這種網絡接口通常是eth0或其它相似的網絡接口.

    TIP
    在Linux上,可以直接捕獲localhost;但同樣的操作不能應用到Windows上.在這種情況下,客戶端和服務端必須位于不同的兩臺機器上, 并且在網絡接口上(要么是物理的,要么是虛擬的)必須激活捕獲, 這樣它們之間才可連接.


    所以,為了運行Wireshark的圖形用戶界面,如果RabbitMQ客戶端和服務器運行在同一個節點,你需要選擇環回接口,如圖下面的截圖所示:



    TIP
    在Linux上,當你安裝Wireshark軟件包,你通常只會有命令行界面,tshark。要安裝Wireshark的GUI,你必須安裝相應的軟件包. 例如,在Fedora中,你需要安裝wireshark-gnome包.

    一旦AMQP交通已穿過環回接口,它已經被Wireshark捕獲。
    運行在步驟4的實驗實際上在兩個獨立的連接中開啟了一個生產者和一個消費者.
    為了高亮顯示,找到一個描述為Basic.PublishContent-Header的包,點擊它,并選擇Follow TCP stream.然后,您可以關閉顯示客戶端和服務器之間有效負載對話的窗口。在主窗口中,您現在可以看到在客戶端和服務器之間交換的網絡數據包,如下面的截圖所示:



    用同樣的方式,你可以選擇RabbitMQ server,如下面的截圖所示:

    在前面的兩個截圖中,我們已經強調了消息AMQP的有效載荷,但由于Wireshark中包括了一個非常完整的AMQP解剖器,你會發現在AMQP交通的很多細節。
    更多
    如果RabbitMQ配置為使用SSL,并且你想要分析加密流量,在一定條件下,通過在Wireshark配置中合理配置SSL公共/私有密鑰也是可以的
    可在http://wiki.wireshark.org/SSL找到更多信息.
    也可參考
    http://wiki.wireshark.org/AMQP,你可以找到一些關于Wireshark AMQP 解剖器的一些指南.




    posted on 2016-07-20 11:39 胡小軍 閱讀(3964) 評論(1)  編輯  收藏 所屬分類: RabbitMQ

    FeedBack:
    # re: RabbitMQ-CookBook-第12章-管理RabbitMQ錯誤條件 2016-07-21 16:57 貝蒂斯橄欖油報價
    哇哦,看著好復雜的樣子,嘿嘿  回復  更多評論
      
    主站蜘蛛池模板: 亚洲AV综合色区无码一区| 亚洲精品美女久久久久久久| 中文字幕乱码亚洲无线三区| 免费国产99久久久香蕉| 国产成人免费高清在线观看 | 亚洲人成精品久久久久| 亚洲成在人线在线播放无码| 亚洲精品国产高清嫩草影院 | 黄桃AV无码免费一区二区三区 | 91精品免费在线观看| 亚洲AV无码AV男人的天堂| 特级做a爰片毛片免费看| 黄色成人网站免费无码av| 婷婷精品国产亚洲AV麻豆不片| 免费黄色大片网站| 亚洲妇女熟BBW| 亚洲日韩aⅴ在线视频| 国内一级一级毛片a免费| 亚洲av永久无码精品网址| 日本19禁啪啪无遮挡免费动图| 亚洲一区二区三区国产精华液| 大学生一级特黄的免费大片视频| 久久国产精品免费一区二区三区| 国产亚洲日韩一区二区三区| 三年片免费高清版| 亚洲aⅴ无码专区在线观看春色 | 免费无遮挡无码视频在线观看| 可以免费观看一级毛片黄a| 曰批免费视频播放免费| 亚洲三级在线播放| 免费观看的毛片手机视频| 久久伊人免费视频| 亚洲综合区图片小说区| 欧美好看的免费电影在线观看 | 57PAO成人国产永久免费视频| 免费无码又爽又刺激高潮软件| 亚洲成a人片在线观看中文!!!| 超pen个人视频国产免费观看| 99久久国产免费-99久久国产免费 99久久国产免费中文无字幕 | 国产成人福利免费视频| 久久免费国产精品一区二区|