Redis是目前流行的高效能key-value資料庫,但如果使用不當,很容易出現慢查詢。慢查詢過多或者一個時間較長(例如20s)的慢查詢會導致操作隊列(Redis是單進程)堵塞,可能會導致服務不可用。因此您需要即時收集並分析Redis slowlog,在出現問題時快速定位解決。本文介紹如何通過Elasticsearch和rsbeat即時分析Redis slowlog。
背景資訊
通過Elasticsearch和rsbeat即時分析Redis slowlog的原理為:使用rsbeat將Redis slowlog採集到Elasticsearch中,然後在Kibana中進行圖形化分析。相關概念說明如下:
Elasticsearch:是一個基於Lucene的即時分布式的搜尋與分析引擎,是遵從Apache開源條款的一款開源產品,是當前主流的企業級搜尋引擎。它提供了一個分布式服務,可以使您快速的近乎於准即時的儲存、查詢和分析超巨量資料集,通常被用來作為構建複雜查詢特性和需求強大應用的基礎引擎或技術。
Elasticsearch相容開源Elasticsearch的功能,以及Security、Machine Learning、Graph、APM等商業功能,致力於資料分析、資料搜尋等情境服務,支援5.5.3、6.3.2、6.7.0、6.8.0和7.4.0等版本,並提供了商業外掛程式X-Pack服務。在開源Elasticsearch的基礎上提供企業級許可權管控、安全監控警示、自動報表產生等功能。本文使用Elasticsearch進行示範,詳情請參見什麼是Elasticsearch。
rsbeat:用來收集和分析Redis慢日誌的採集器,詳情請參見rsbeat官方文檔。
Redis:是一個開源的、基於記憶體的資料結構儲存空間,可以用作資料庫、緩衝和訊息中介軟體,詳情請參見Redis官方說明。
ApsaraDB for Redis(ApsaraDB for Redis)是相容開源Redis協議標準、提供記憶體加硬碟的混合儲存方式的資料庫服務,基於高可靠雙機熱備架構及可平滑擴充的叢集架構,滿足高讀寫效能情境及彈性變更配置的業務需求。本文使用ApsaraDB for Redis進行示範,更多詳情請參見什麼是ApsaraDB for Redis。
操作流程
建立Elasticsearch執行個體、ApsaraDB for Redis執行個體(以下簡稱Redis執行個體)和ECS執行個體,三者在同一Virtual Private Cloud(Virtual Private Cloud)下。
根據需求設定Redis slowlog產生的條件,以及可記錄的slowlog的最大條數。
在ECS中安裝rsbeat,並在其設定檔中指定Redis和Elasticsearch服務。
通過Kibana查看日誌詳細資料,並根據需求進行統計分析。
準備工作
建立Elasticsearch執行個體,並開啟自動建立索引功能。
具體操作步驟請參見建立Elasticsearch執行個體和配置YML參數。本文使用的執行個體版本為通用商業版6.7。
建立Redis執行個體。
具體操作步驟請參見步驟1:建立執行個體。本文使用的執行個體版本為Redis 5.0社區版,並且與Elasticsearch執行個體在同一VPC下,便於內網訪問。
建立ECS執行個體。
具體操作步驟請參見自訂購買執行個體。本文使用的執行個體鏡像為CentOS 7.6 64位,並且與Redis和Elasticsearch執行個體在同一VPC下。
配置Redis執行個體的訪問白名單。
將ECS執行個體的內網IP地址添加到Redis執行個體的白名單中,具體操作步驟請參見設定IP白名單。
步驟一:配置Redis慢查詢參數
登入Redis管理主控台。
在頂部功能表列處,選擇地區。
在執行個體列表頁面,單擊目標執行個體ID。
在左側導覽列,單擊參數設定。
在參數設定列表中,找到slowlog-log-slower-than和slowlog-max-len參數,將其修改為您期望的值。
參數
說明
樣本
slowlog-log-slower-than
當命令執行時間(不包括排隊時間)超過該參數值時,該命令會被定義為慢查詢,並記錄到slowlog中。單位為微秒,預設為10000,即10毫秒。
重要負數表示關閉慢查詢日誌功能,0表示記錄所有命令操作。
本文將該參數值設定為20000。表示在slowlog中記錄執行時間長度超過20毫秒的命令。
slowlog-max-len
slowlog中可以記錄的最大慢查詢命令的條數。當slowlog中的記錄數超過最大值後,Redis會將最早的slowlog刪除。
本文將該參數值設定為100。表示在slowlog中記錄最近100條慢查詢命令。
步驟二:安裝並配置rsbeat
串連ECS執行個體。
具體操作步驟請參見串連執行個體。
下載並且解壓rsbeat。
本文使用5.3.2版本。
wget https://github.com/Yourdream/rsbeat/archive/master.zip unzip master.zip
修改rsbeat配置。
執行以下命令開啟rsbeat.yml檔案。
cd rsbeat-master vim rsbeat.yml
按照以下說明修改rsbeat和output.elasticsearch參數配置,並儲存。
表 1. rebeat配置 參數
說明
period
每隔多久將slowlog輸出到Elasticsearch。
redis
Redis執行個體的串連地址,擷取方式請參見查看串連地址。
重要由於設定檔中沒有定義Redis執行個體的密碼,因此在擷取串連地址後,您還需要開啟免密訪問,才能確保rsbeat能夠訪問Redis執行個體,開啟方法請參見開啟專用網路免密訪問。
slowerThan
定義將
config set slowlog-log-slower-than
命令發送到Redis伺服器的時間。單位為微秒。表 2. output.elasticsearch配置 參數
說明
hosts
Elasticsearch執行個體的串連地址,可在執行個體的基本資料頁面擷取,詳情請參見查看執行個體的基本資料。
username
Elasticsearch執行個體的訪問使用者名稱,預設為elastic。
password
對應使用者的密碼。elastic使用者的密碼在建立執行個體時設定,如果忘記可重設,重設密碼的注意事項和操作步驟請參見重設執行個體訪問密碼。
template.overwrite
是否覆蓋已存在的同名模板,預設為true。
啟動rsbeat服務。
./rsbeat.linux.amd64 -c rsbeat.yml -e -d "*"
步驟三:通過Kibana圖形化分析slowlog
登入目標Elasticsearch執行個體的Kibana控制台。
具體操作步驟請參見登入Kibana控制台。
建立索引模式。
- 在左側導覽列,單擊Management。
- 在Kibana地區,單擊Index Patterns。
- 單擊Create index pattern。
輸入Index pattern名稱,單擊Next step。
- 從Time Filter field name中,選擇時間過濾器欄位名(本文選擇@timestamp)。
- 單擊Create index pattern。
查看slowlog的詳細資料。
在左側導覽列,單擊Discover。
在Discover頁面左側,選擇目標索引模式rsbeat-*。
在頁面右上方,選擇一段時間,查看該時間段內的slowlog資訊。
統計slowlog數量最多的前10個key,並以降序排列展示。
在左側導覽列,單擊Visualize。
在Visualize頁面,單擊表徵圖。
在New Visualization對話方塊中,單擊Pie。
選擇索引模式rsbeat-*。
按照下圖配置Metrics和Buckets。
單擊表徵圖,查看結果。
說明更多Kibana的使用方法,請參見Kibana官方文檔。