2023-05-09

Ant Media || 如何輕鬆地在三個步驟中監控 Ant Media Server 實例?

它是如何運作的


對於 Ant Media Server 方面,它只是 Apache Kafka 的事件生產者。 Ant Media Server 每 15 秒向 Apache Kafka 發送實例和串流統計訊息。您可以使用任何其他工具或管道消耗 Apache Kafka 事件。對於我們的情況,我們使用以下管道來收集和可視化統計訊息。

  1. Ant Media Server 向 Apache Kafka 發送事件
  2. Logstash 消耗 Apache Kafka 事件並將其寫入 Elastic Search
  3. Grafana 從 Elastic Search 收集統計訊息並可視化它們

因此,在本文章中,我們展示了如何安裝上述管道,以為 Ant Media Server 實例提供即插即用的監控解決方案。讓我們開始安裝以下組件:

Install Apache Kafka ( link )


Apache Kafka 對於構建 real-time streaming 數據管道以在系統或應用程序之間獲取數據非常有用。

  1. 安裝 Java,因為 Apache Kafka 需要 Java。
    apt-get update && apt-get install openjdk-8-jdk -y
    
  2. 下載 Apache Kafka,然後解壓歸檔文件
    wget -qO- https://archive.apache.org/dist/kafka/2.2.0/kafka_2.12-2.2.0.tgz | tar -zxvf- -C /opt/ && mv /opt/kafka* /opt/kafka
    
  3. 如下所示 編輯server.properties文件。  vim /opt/kafka/config/server.properties 
    listeners=PLAINTEXT://your_server_ip:9092
    
  4. 啟動 Apache Kafka
    /opt/kafka/bin/zookeeper-server-start.sh /opt/kafka/config/zookeeper.properties &
    /opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties &
    

    首先,我們啟動了 ZooKeeper,因為 Kafka 需要 ZooKeeper,然後我們啟動了 Kafka。

  5. 通過運行以下命令檢查它是否正常工作
    netstat -tpln | egrep "9092|2181"
    

    如果您看到端口(9092 和 2181)處於偵聽模式,則表示它正在工作。您已經完成了第一次安裝。


Run Apache Kafka as a systemd Service. (link)

將 Apache Kafka 作為 systemd 服務運行將使我們能夠使用 systemctl 命令管理 Apache Kafka 服務。
請按照以下說明操作:

  • Create systemd unit file for Apache Kafkavim /lib/systemd/system/kafka.service
  • 將以下內容複製並貼到您在上面建立的 kafka.service 內容中。
    請確保您在以下內容中為您的系統設置了正確的 JAVA_HOME 路徑 
      
    [Unit]
    Description=Apache Kafka Server
    Requires=network.target remote-fs.target
    After=network.target remote-fs.target kafka-zookeeper.service
    
    [Service]
    Type=simple
    Environment=JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
    ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
    ExecStop=/opt/kafka/bin/kafka-server-stop.sh
    
    [Install]
    WantedBy=multi-user.target
    
  • Create systemd unit file for Zookeepervim /lib/systemd/system/kafka-zookeeper.service
  • Copy and paste the below content to the kafka-zookeeper.service file you’ve created above.
    [Unit]
    Description=Apache Zookeeper Server
    Requires=network.target remote-fs.target
    After=network.target remote-fs.target
    
    [Service]
    Type=simple
    Environment=JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
    ExecStart=/opt/kafka/bin/zookeeper-server-start.sh /opt/kafka/config/zookeeper.properties
    ExecStop=/opt/kafka/bin/zookeeper-server-stop.sh
    
    [Install]
    WantedBy=multi-user.target 
  • Enable and reload the systemd daemon to apply new changes.
    systemctl enable kafka-zookeeper.service
    systemctl enable kafka.service
    
  • 使用 systemctl 啟動 Apache Kafka
    systemctl start kafka-zookeeper.service
    systemctl start kafka.service


Ant Media Server 的 Kafka 設置 (link)

如果您想監控 Ant Media Server,您需要在文件中設置您的 Apache Kafka 的 IP 地址。 AMS_INSTALLTION_DIR/conf/red5.properties 

  • 用編輯器打開下面一行vim /usr/local/antmedia/conf/red5.properties
  • 編輯以下行server.kafka_brokers=ip_address:port_number替換 ip_address:port_number 為 Apache Kafka IP 地址和端口號。例如: server.kafka_brokers=192.168.1.230:9092
  • 重啟 Ant Media Server:service antmedia restart
  • 檢查它是否正常工作。當你在 kafka server上運行如下命令,如果有數據流,說明一切配置正常。/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server 192.168.1.230:9092 --topic ams-instance-stats --from-beginning輸出應如下所示:
    {"instanceId":"a06e5437-40ee-49c1-8e38-273544964335","cpuUsage":
    {"processCPUTime":596700000,"systemCPULoad":0,"processCPULoad":1},"jvmMemoryUsage": 
    {"maxMemory":260046848,"totalMemory":142606336,"freeMemory":21698648,"inUseMemory":120907688},"systemInfo": 
    {"osName":"Linux","osArch":"amd64","javaVersion":"1.8","processorCount":1},"systemMemoryInfo":
    ...


    一些有用的 Apache Kafka 命令 (link)

  • 列出所有主題/opt/kafka/bin/kafka-topics.sh --list --bootstrap-server your_kafka_server:9092例如:
    /opt/kafka/bin/kafka-topics.sh --list --bootstrap-server 192.168.1.230:9092
    ams-instance-stats
    ams-webrtc-stats
    kafka-webrtc-tester-stats
    
    • 如上所述,使用 Kafka Consumer 監控特定主題的消息/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server 192.168.1.230:9092 --topic ams-instance-stats --from-beginning


    安裝 Elasticsearch 和 Logstash (link)

    安裝 Elasticsearch (link)

    1. 導入 GPG Key 和 Repo
      wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
      sudo apt-get install apt-transport-https
      echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
      
    2. 更新 package lists 並安裝 elastic search
      apt-get update && apt-get install elasticsearch
      
    3. 啟用並啟動 elasticsearch 服務
      systemctl enable elasticsearch.service
      systemctl start elasticsearch.service


    安裝 Logstash (link)

    Logstash 是一種服務器端數據處理管道,可同時從多個來源獲取數據,對其進行轉換,然後將其發送到“存儲”(如 Elasticsearch)

    1. 更新您的 package lists,然後使用以下命令 安裝 logstash 
      apt-get update && apt-get install logstash
      
    2. 啟用 logstash 服務
      systemctl enable logstash.service
      
    3. Configure logstash.
      創建 /etc/logstash/conf.d/logstash.conf 文件並添加以下內容。請不要忘記更換 kafka_server_ip 並確保 elasticsearch_ip 正確。 
       
      #kafka
      input {
        kafka {
          bootstrap_servers => "kafka_server_ip:9092"
          client_id => "logstash"
          group_id => "logstash"
          consumer_threads => 3
          topics => ["ams-instance-stats","ams-webrtc-stats","kafka-webrtc-tester-stats"]
          codec => "json"
          tags => ["log", "kafka_source"]
          type => "log"
        }
      }
      
      #elasticsearch
      output {
        elasticsearch {
           hosts => ["127.0.0.1:9200"] #elasticsearch_ip
           index => "logstash-%{[type]}-%{+YYYY.MM.dd}"
        }
        stdout { codec => rubydebug }
      }
      
    4. 保存並關閉文件,然後重啟 logstash 服務  
      systemctl restart logstash


    測試 Elasticsearch 和 Logstash 配置 (link)

    您可以使用以下命令測試 Elasticsearch 和 Logstash 是否正常工作。
    curl -XGET 'localhost:9200/_cat/indices?v&pretty'

    示例輸出:

    health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
    yellow open logstash-log-2020.03.23 mf-ffIHBSNO4s7_YoUr_Rw 1 1 1300 0 527.5kb 527.5kb



    安裝 Grafana  (link)

    Grafana 是一個開源指標分析和可視化套件。

    1. 為了安裝 Grafana 服務器,請運行以下命令。
      sudo apt-get install -y software-properties-common wget apt-transport-https
      wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
      sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
      sudo apt-get update && sudo apt-get install grafana
      
    2. 啟用並啟動 grafana 服務器
      systemctl enable grafana-server
      systemctl start grafana-server


    Configure Grafana (link)

    1. Login to Web panel(http://your_ip_address:3000/login) through your web browser. Default username and password is admin/admin
    2. Click Add data source 

    3. Select Elasticsearch 


    4. Set setting as below
      URL : http://127.0.0.1:9200
      Index name: logstash-
      Time filed name: @timestamp
      Version: 7.0+




    5. Click New dashboard 


    6. Click Add Query 

    7. Choose whatever you want to monitor.Query: ElasticSearch 

    8. Ant Media Example Dashboard 

      If you would like to use the same dashboard, you can download it from the below link.
      https://antmedia.io/antmedia-dashboard.json


    Bonus: Create Telegram Alert (link)

    您可以在 Grafana 中定義一個 Alert,它可以在特定事件發生時通知您

    1. 創建一個新的 New Bot
      • 打開 Telegram 並蒐索 @BotFather 用戶並發送以下命令。
        /newbot
        
      • 當您創建一個 new bot 時,您將得到如下回應。
        Use this token to access the HTTP API:
        1254341629:AAHYHhJK8TgsUXa7jqBK7wU1bJ8hzWhUFzs
        Keep your token secure and store it safely, it can be used by anyone to control your bot.
        
    2. 創建頻道並檢索頻道的聊天 ID。
      • 在 telegram 中創建一個頻道並以管理員身份邀請您的機器人
      • 發送測試消息並獲取聊天 ID
      • 使用 cURL 或僅使用瀏覽器訪問下面的 url。不要忘記更換 access token
        https://api.telegram.org/bot{USE_YOUR_ACCESS_TOKEN}/getUpdates
        
      • 您將獲得如下所示。
        {"ok":true,"result":[{"update_id":222389875,
        "channel_post":{"message_id":2,"chat": 
        {"id":-1001181377238,"title":"test","type":"channel"},"date":1587016720,"text":"test"}}]}
        
      • 保存 ID 號:因為我們將在下一步中需要它 -1001181377238 


    Configure Grafana Notification (link)

    我們已經配置了上面的聊天機器人。現在讓我們開始配置 Grafana Notification

    1. 通過以下方式登錄到 Grafana 網頁面板 http://your_grafana_server:3000
    2. Click Alerting / Notification Channel  

    3. Add New Channel 

    4. Configure it as shown in the below screenshot

      Name : name_of_your_notification.
      Type : Telegram
      Bot Api Token: your_bot_token_id
      Chat ID: your_channel_id
      

      If you click on the Send Test and there is a message on the telegram, everything is fine.

      現在您已經根據需要設置了通知。

    這是監控 Ant Media Server 的整個設置。
    這次的分享到這邊,我們下次見。

    Ant Media || 如何輕鬆地在三個步驟中監控 Ant Media Server 實例?