通過Elasticsearch和rsbeat實(shí)時分析Redis slowlog
Redis是目前流行的高性能key-value數(shù)據(jù)庫,但如果使用不當(dāng),很容易出現(xiàn)慢查詢。慢查詢過多或者一個時間較長(例如20s)的慢查詢會導(dǎo)致操作隊(duì)列(Redis是單進(jìn)程)堵塞,可能會導(dǎo)致服務(wù)不可用。因此您需要實(shí)時收集并分析Redis slowlog,在出現(xiàn)問題時快速定位解決。本文介紹如何通過Elasticsearch和rsbeat實(shí)時分析Redis slowlog。
背景信息
通過Elasticsearch和rsbeat實(shí)時分析Redis slowlog的原理為:使用rsbeat將Redis slowlog采集到Elasticsearch中,然后在Kibana中進(jìn)行圖形化分析。相關(guān)概念說明如下:
Elasticsearch:是一個基于Lucene的實(shí)時分布式的搜索與分析引擎,是遵從Apache開源條款的一款開源產(chǎn)品,是當(dāng)前主流的企業(yè)級搜索引擎。它提供了一個分布式服務(wù),可以使您快速的近乎于準(zhǔn)實(shí)時的存儲、查詢和分析超大數(shù)據(jù)集,通常被用來作為構(gòu)建復(fù)雜查詢特性和需求強(qiáng)大應(yīng)用的基礎(chǔ)引擎或技術(shù)。
阿里云Elasticsearch兼容開源Elasticsearch的功能,以及Security、Machine Learning、Graph、APM等商業(yè)功能,致力于數(shù)據(jù)分析、數(shù)據(jù)搜索等場景服務(wù),支持5.5.3、6.3.2、6.7.0、6.8.0和7.4.0等版本,并提供了商業(yè)插件X-Pack服務(wù)。在開源Elasticsearch的基礎(chǔ)上提供企業(yè)級權(quán)限管控、安全監(jiān)控告警、自動報表生成等功能。本文使用阿里云Elasticsearch進(jìn)行演示,詳情請參見什么是阿里云Elasticsearch。
rsbeat:用來收集和分析Redis慢日志的采集器,詳情請參見rsbeat官方文檔。
Redis:是一個開源的、基于內(nèi)存的數(shù)據(jù)結(jié)構(gòu)存儲器,可以用作數(shù)據(jù)庫、緩存和消息中間件,詳情請參見Redis官方說明。
云數(shù)據(jù)庫Redis版(ApsaraDB for Redis)是兼容開源Redis協(xié)議標(biāo)準(zhǔn)、提供內(nèi)存加硬盤的混合存儲方式的數(shù)據(jù)庫服務(wù),基于高可靠雙機(jī)熱備架構(gòu)及可平滑擴(kuò)展的集群架構(gòu),滿足高讀寫性能場景及彈性變配的業(yè)務(wù)需求。本文使用云數(shù)據(jù)庫Redis版進(jìn)行演示,更多詳情請參見什么是云數(shù)據(jù)庫Redis版。
操作流程
創(chuàng)建阿里云Elasticsearch實(shí)例、云數(shù)據(jù)庫Redis版實(shí)例(以下簡稱Redis實(shí)例)和ECS實(shí)例,三者在同一專有網(wǎng)絡(luò)VPC(Virtual Private Cloud)下。
根據(jù)需求設(shè)置Redis slowlog生成的條件,以及可記錄的slowlog的最大條數(shù)。
在ECS中安裝rsbeat,并在其配置文件中指定Redis和Elasticsearch服務(wù)。
通過Kibana查看日志詳細(xì)信息,并根據(jù)需求進(jìn)行統(tǒng)計分析。
準(zhǔn)備工作
創(chuàng)建阿里云Elasticsearch實(shí)例,并開啟自動創(chuàng)建索引功能。
具體操作步驟請參見創(chuàng)建阿里云Elasticsearch實(shí)例和配置YML參數(shù)。本文使用的實(shí)例版本為通用商業(yè)版6.7。
創(chuàng)建Redis實(shí)例。
具體操作步驟請參見步驟1:創(chuàng)建實(shí)例。本文使用的實(shí)例版本為Redis 5.0社區(qū)版,并且與阿里云Elasticsearch實(shí)例在同一VPC下,便于內(nèi)網(wǎng)訪問。
創(chuàng)建ECS實(shí)例。
具體操作步驟請參見自定義購買實(shí)例。本文使用的實(shí)例鏡像為CentOS 7.6 64位,并且與Redis和Elasticsearch實(shí)例在同一VPC下。
配置Redis實(shí)例的訪問白名單。
將ECS實(shí)例的內(nèi)網(wǎng)IP地址添加到Redis實(shí)例的白名單中,具體操作步驟請參見設(shè)置IP白名單。
步驟一:配置Redis慢查詢參數(shù)
登錄Redis管理控制臺。
在頂部菜單欄處,選擇地域。
在實(shí)例列表頁面,單擊目標(biāo)實(shí)例ID。
在左側(cè)導(dǎo)航欄,單擊參數(shù)設(shè)置。
在參數(shù)設(shè)置列表中,找到slowlog-log-slower-than和slowlog-max-len參數(shù),將其修改為您期望的值。
參數(shù)
說明
示例
slowlog-log-slower-than
當(dāng)命令執(zhí)行時間(不包括排隊(duì)時間)超過該參數(shù)值時,該命令會被定義為慢查詢,并記錄到slowlog中。單位為微秒,默認(rèn)為10000,即10毫秒。
重要負(fù)數(shù)表示關(guān)閉慢查詢?nèi)罩竟δ埽?表示記錄所有命令操作。
本文將該參數(shù)值設(shè)置為20000。表示在slowlog中記錄執(zhí)行時長超過20毫秒的命令。
slowlog-max-len
slowlog中可以記錄的最大慢查詢命令的條數(shù)。當(dāng)slowlog中的記錄數(shù)超過最大值后,Redis會將最早的slowlog刪除。
本文將該參數(shù)值設(shè)置為100。表示在slowlog中記錄最近100條慢查詢命令。
步驟二:安裝并配置rsbeat
連接ECS實(shí)例。
具體操作步驟請參見連接實(shí)例。
下載并且解壓rsbeat。
本文使用5.3.2版本。
wget https://github.com/Yourdream/rsbeat/archive/master.zip unzip master.zip
修改rsbeat配置。
執(zhí)行以下命令打開rsbeat.yml文件。
cd rsbeat-master vim rsbeat.yml
按照以下說明修改rsbeat和output.elasticsearch參數(shù)配置,并保存。
表 1. rebeat配置 參數(shù)
說明
period
每隔多久將slowlog輸出到Elasticsearch。
redis
Redis實(shí)例的連接地址,獲取方式請參見查看連接地址。
重要由于配置文件中沒有定義Redis實(shí)例的密碼,因此在獲取連接地址后,您還需要開啟免密訪問,才能確保rsbeat能夠訪問Redis實(shí)例,開啟方法請參見開啟專有網(wǎng)絡(luò)免密訪問。
slowerThan
定義將
config set slowlog-log-slower-than
命令發(fā)送到Redis服務(wù)器的時間。單位為微秒。表 2. output.elasticsearch配置 參數(shù)
說明
hosts
阿里云Elasticsearch實(shí)例的連接地址,可在實(shí)例的基本信息頁面獲取,詳情請參見查看實(shí)例的基本信息。
username
阿里云Elasticsearch實(shí)例的訪問用戶名,默認(rèn)為elastic。
password
對應(yīng)用戶的密碼。elastic用戶的密碼在創(chuàng)建實(shí)例時設(shè)定,如果忘記可重置,重置密碼的注意事項(xiàng)和操作步驟請參見重置實(shí)例訪問密碼。
template.overwrite
是否覆蓋已存在的同名模板,默認(rèn)為true。
啟動rsbeat服務(wù)。
./rsbeat.linux.amd64 -c rsbeat.yml -e -d "*"
步驟三:通過Kibana圖形化分析slowlog
登錄目標(biāo)阿里云Elasticsearch實(shí)例的Kibana控制臺。
具體操作步驟請參見登錄Kibana控制臺。
創(chuàng)建索引模式。
- 在左側(cè)導(dǎo)航欄,單擊Management。
- 在Kibana區(qū)域,單擊Index Patterns。
- 單擊Create index pattern。
輸入Index pattern名稱,單擊Next step。
- 從Time Filter field name中,選擇時間過濾器字段名(本文選擇@timestamp)。
- 單擊Create index pattern。
查看slowlog的詳細(xì)信息。
在左側(cè)導(dǎo)航欄,單擊Discover。
在Discover頁面左側(cè),選擇目標(biāo)索引模式rsbeat-*。
在頁面右上角,選擇一段時間,查看該時間段內(nèi)的slowlog信息。
統(tǒng)計slowlog數(shù)量最多的前10個key,并以降序排列展示。
在左側(cè)導(dǎo)航欄,單擊Visualize。
在Visualize頁面,單擊圖標(biāo)。
在New Visualization對話框中,單擊Pie。
選擇索引模式rsbeat-*。
按照下圖配置Metrics和Buckets。
單擊圖標(biāo),查看結(jié)果。
說明更多Kibana的使用方法,請參見Kibana官方文檔。