關於作者:
劉宇,他是天成金融創新中心的基礎技術架構師,擁有9年的IT經驗,9年的資料庫開發和運營經驗,以及4次大型營銷活動。 目前主要研究方向為容器、分布式資料庫技術等基礎技術。
*在解決 Redis 效能問題時,通常的做法是從 Redis 中找出要優化的問題。
Redis Slowlog 在記憶體中被設計為先進先出的佇列結構,在大量慢日誌的情況下,舊命令會被從慢日誌中重新整理出來,無法跟蹤。
本文介紹如何使用修改後的RSBEAT將slowlog轉儲到Elasticsearch中進行分析。
1. Redis Slowlog 簡介
Slowlog 核心配置引數和命令。
slowlog-log-slower-than:slowlog 的閾值,只有查詢執行時間大於 slowlog-log-sslow-than,單位設定為微秒,預設為 10000 微秒,即 10ms。
slowlog-max-len:表示最大慢查詢數,預設值為128。 當 slowlog 超過最大值時,將刪除最早的 slowlog。
slowlog get n:要獲取指定數量的記錄,可以執行slowlog get n命令。
rsbeat 簡介
RSBEAT** 是 Beats 的官方平台,它整合了各種單一用途的資料收集器。 它們將資料從成百上千臺機器和系統傳送到 Logstash 或 Elasticsearch。
官方網站:elasticco/guide/en/beats/libbeat/current/community-beats.html
這一次,我們使用了三款產品:Elasticsearch、Kibana 和 RSBEAT。 Elasticsearch用於儲存解析後的Redis慢日誌,Kibana用於圖形分析,RSBEAT用於收集Redis慢日誌。
rsbeat 的採集原理如下:
2. RSBEAT轉型
因為社群的 rsbeat 只支援 ipport 檢索。 不支援 Redis Sentinel 和 Redis Cluster,為了滿足我們的需求,這裡對 RSBake 進行了部分修改。 轉換點如下:
1. 增加對 Sentinel 和 Redis 集群的支援
rsbeat 的原始配置如下:
Redis 引數以 ipport 的形式配置為 Redis 例項列表,我們將其轉換為 ipportname 的形式
對於 Redis Sentinel,MyRedis 使用在 Sentinel 中註冊的主名稱來檢索它。
對於 Redis 集群,您可以使用自定義集群名稱或 CMDB 中的集群名稱來檢索 MyRedis。 一般情況下,乙個Redis集群中節點較多,可以避免手動登入多個節點獲取慢查詢,從而提高效率。
改造 rsbeatGo ** 如下所示,新增乙個 ipportname 字串處理程式:
在 PoolList 對映結構中:
2. 記錄Redis例項的角色資訊
如果要篩選 Redis 的角色,需要記錄角色資訊。 在 rebeat 中,在 slowlog get 和 slowlog reset 之後新增 role 命令,獲取角色資訊。
在 func (bt *rsbeat) redisc(beatname string, init bool, c redisconn, ipport string) 函式。
和節拍
然後修改 poolinit 函式並新增 slowerlen 引數:
3. Slowlog-max-len 是可配置的
修改配置中的 slowlog-max-len在 go 檔案中,將 slowerlen 屬性新增到配置結構中,預設值為:
3. 使用 Kibana 進行搜尋
1. 按主名稱或 Redis 集群名稱搜尋
2. 使用主名稱和角色搜尋:
為角色新增篩選器:
然後檢索主名稱:
3. 在儀表板中搜尋:
四、總結
Elastic Stack 由強大的開源社群提供支援。 通過簡單的轉換和折騰,可以擴充套件rsbeat功能,更好地滿足redis哨兵、redis集群等更靈活的查詢和檢索需求。 本文講解了轉型的內容,希望能為大家提供幫助和思路。