雲計算

【最佳實踐】阿里雲Elasticsearch 簡單高效的實現Nginx Web服務器監控

Nginx 是一種非常流行的開源 Web 服務器,為全球數百萬個應用程序提供服務。 Nginx僅次於Apache,這得益於它作為 Web 服務器,有效地提供靜態內容和整體性能的方式在全球流行(它還可以充當反向代理,HTTP緩存和負載平衡器)。而從操作和安全性的角度來看,由於Nginx處於應用程序體系結構的關鍵時刻,所以需要對其進行實時數據監控。

Nginx日誌記錄基礎


Nginx 為用戶提供了各種日誌記錄選項,包括日誌記錄到文件,條件日誌記錄和 syslog 日誌記錄。 Nginx將生成兩種可用於操作監視和故障排除的日誌類型:錯誤日誌和訪問日誌。
默認情況下,這兩個日誌通常都位於/var/log/nginx下,但是此位置可能因系統而異。

# cd /var/log/nginx/
# ls
access.log  error.log

Nginx error logs

錯誤日誌包含可用於對操作問題進行故障診斷的診斷信息。 Nginx error_log指令可用於指定日誌文件的路徑和嚴重性,並可在主要,http,郵件,流,服務器,位置上下文(按此順序)中使用。

日誌示例:

2020/04/22 10:06:21 [error] 9289#0: *4128 connect() failed (111: Connection refused) while connecting to upstream, client: 101.133.213.44, server: notest004, request: "GET /admin/ HTTP/1.1", upstream: "http://121.41.222.215:3000/admin/", host: "121.41.222.215"

Nginx access logs

訪問日誌包含有關發送到 Nginx 並由 Nginx 服務的所有請求的信息。 因此,它們是用於性能監控以及安全性的寶貴資源。 Nginx 訪問日誌的默認格式是組合格式,但是在分發之間可能會有所不同。 與錯誤日誌一樣,您可以使用 access_log 偽指令來設置日誌文件路徑和日誌格式。

日誌示例

47.97.73.90 - - [22/Apr/2020:06:26:39 +0800] "GET / HTTP/1.1" 502 559 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/69.0.3494.0 Safari/537.36" "-"

準備工作


將 Nginx 日誌傳送到阿里雲 Elasticsearch 最簡單方法是使用 Filebeat。本次教程,將會在阿里雲服務環境下,通過在雲服務器ECS上安裝 Nodejs、Nignx、filebeat,同時開通阿里雲 Elasticsearch 服務。

開通阿里雲 ECS 服務開通阿里雲 Elasticsearch 同一VPC下的 Centos 7.4 版本的 ECS 環境;
• 關閉防火牆以及selinux安全防護工具(ECS為默認關閉狀態);
• 開放 ECS 安全組端口,確保 Nodejs 訪問 3000 端口,Nginx 訪問 80 端口;
• 開通阿里雲 Elasticsearch 6.7 環境,確保控制檯開通自動創建索引功能,使用創建的賬號密碼登錄 Kibana
• 監測阿里雲 Elasticsearch 安全配置是否開放白名單限制;

安裝 Nodejs

Nodejs 是一個簡單的基於Express框架的web服務器,我們可以在阿里雲ECS 服務器上寫入如下指令來安裝 Nodejs。

# yum install nodejs
# yum install -y npm
#####查看node及npm版本#######
# node -v
# npm -v
####部署nodejs 的web服務器,從git上下載一個簡單的nodejs代碼
# git clone https://github.com/liu-xiao-guo/samplenodejs
####進入samplenodejs根目錄運行如下命令####
# cd samplenodejs/
# npm install
# npm start

在 ECS 安全組中開啟3000 訪問端口,並在瀏覽器中輸入 ECS IP訪問地址:http://121.41.xx.xx:3000/hello

image.png

如果在控制檯及瀏覽器能看到如下輸出,表明 Nodejs 應用已經被成功運行。

image.png

安裝 Nignx 並設置為反向代理

我們在 阿里雲ECS 服務器上寫入如下指令來安裝 Nignx

# yum install nginx
####配置反向代理####
# vim /etc/nginx/nginx.conf
 server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  notest004;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
           proxy_pass http://121.40.100.115:3000;
           index index.html index.htm;
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
        }
    }
####啟動nignx###
# systemctl start nginx

如果我們想停止nginx,我們可以使用如下的命令:
systemctl stop nginx
要在停止時啟動Web服務器,請鍵入:
systemctl start nginx
要停止然後再次啟動該服務,請鍵入:
systemctl restart nginx

下載並安裝 Filebeat


在阿里雲ECS環境中,下載filebeat安裝包,並解壓。

安裝

# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.7.0-linux-x86_64.tar.gz
# tar -zxvf filebeat-6.7.0-linux-x86_64.tar.gz

配置

修改filebeat-6.7.0-linux-x86_64/filebeat.yml

#-------------------------- Elasticsearch output ------------------------------
output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["es-cn-0pp19tb10000688c8p.elasticsearch.aliyuncs.com:9200"]
  username: "elastic"
  password: "Elastic123"
  
  setup.kibana:
      host: "https://es-cn-0pp19tb1000888c8p.kibana.elasticsearch.aliyuncs.com:5601"

啟動 Nginx 模塊

# ./filebeat modules enable nginx

配置模塊

為了能夠使得我們的nginx模塊能夠正確地被 Kibana Dashboard 顯示,我們必須運行如下的命令。
# ./filebeat setup
image.png

至此我們的安裝都已經完成。

Kibana Dashboard 展示


進入 Kibana,點擊 Dashboard 選擇已導入的 Nginx 模塊
image.png
我們點擊“【Filebeat Nginx】Overview”
image.png
至此,我們完成了對 Nginx 日誌的監控。在 Kibana Dashboard 我們可以看到 Nginx 的所有信息。

聲明:本文由“Beats:使用Elastic Stack對Nginx Web服務器監控”基於阿里雲服務環境授權改編

原文作者:Elastic 中國社區佈道師——劉曉國
合作編輯: Lettie/大禹
出處鏈接:https://me.csdn.net/UbuntuTouch


image.png

阿里雲Elastic Stack】100%兼容開源ES,獨有9大能力

相關活動


更多折扣活動,請訪問阿里雲 Elasticsearch 官網

阿里雲 Elasticsearch 商業通用版,1核2G ,SSD 20G首月免費
阿里雲 Logstash 2核4G首月免費


image.png

image.png

Leave a Reply

Your email address will not be published. Required fields are marked *