ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

redis慢日志查询

2022-01-26 15:06:16  阅读:174  来源: 互联网

标签:DEFAULT sl redis results 查询 time 日志 NULL


(1)利用python执行 slowlog_get查询慢日志,写成job,一分钟执行一次,查200条,然后存到mysql,以便时候分析:

#!/usr/bin/env python
import datetime,time,redis
import mysql.connector
import pytz

pystime = time.time()
tz = pytz.timezone('Asia/Shanghai')

redis_ips=['10.x.x.x','6379','391axxx']
def slow_redis():

    Redis = redis.StrictRedis(host=redis_ips[0],port=redis_ips[1],password=redis_ips[2],socket_timeout=1)
    results = Redis.slowlog_get(200) #每次获取200条
    print(results)
    session_id=results[0]['id']
    i_start_time = datetime.datetime.fromtimestamp(int(results[0]['start_time'])).strftime('%Y-%m-%d %H:%M:%S') #时间格式转换
    duration = round(int(results[0]['duration'])/1000,2) #毫秒
    command = results[0]['command']
    if duration>=10: # 开发定义超过10ms的慢日志会留意
        i_host=redis_ips[0]
        s_results={ "session_id":session_id,"host_ip":i_host,"start_time":i_start_time,"duration":duration,"cmd":command,'insert_time':datetime.datetime.now(tz) }
        # print(s_results)

        conn = mysql.connector.connect(host='192.168.x.x', port=3306, user='devops', passwd='xxxxx',db='devops', charset='utf8mb4')
        cur = conn.cursor(buffered=True)
        try:
            sql_d = "delete from devops.redis_log where insert_time <= DATE_SUB(CURDATE(), INTERVAL 7 DAY) " # 删除7天以前的数据
            cur.execute(sql_d)
            conn.commit()
        except:
            conn.rollback()
            print('\adevops.redis_log table delete failed. Transaction rolled back')
            raise
        try:
            sql_i = (
                f"insert ignore into devops.redis_log ({', '.join(s_results.keys())}) "
                f"values (%({')s, %('.join(s_results.keys())})s)")
            cur.execute(sql_i,s_results)
            conn.commit()
            # inserted = cur.rowcount
        except:
            conn.rollback()
            print('\adevops.redis_log table ops failed. Transaction rolled back')
            raise
        cur.close()
        conn.close()
slow_redis()
pyetime = time.time()
print ('当前脚本运行时间为:',round(float(pyetime - pystime),3),'s')

 注:先再mysql建立表结构:

CREATE TABLE `redis_log` (
  `session_id` int DEFAULT NULL,
  `host_ip` varchar(100) COLLATE utf8mb4_0900_as_cs DEFAULT NULL,
  `start_time` datetime DEFAULT NULL,
  `duration` decimal(10,0) DEFAULT NULL,
  `cmd` varchar(5000) COLLATE utf8mb4_0900_as_cs DEFAULT NULL,
  `insert_time` timestamp(3) NULL DEFAULT NULL,
  `remark` varchar(100) COLLATE utf8mb4_0900_as_cs DEFAULT NULL,
  UNIQUE KEY `redis_slog_pk` (`session_id`),
  KEY `idx_start_time` (`start_time`)

(2)做成docker镜像,利用k8s cronjob一分钟执行一次。

 Dockerfile如下:

FROM python:3.7-alpine
RUN addgroup -S zwgroup && adduser -S zhanwei -G zwgroup
#creates work dir
WORKDIR /app
#copy python script to the container folder app
COPY redis_sl_db.py /app/redis_sl_db.py
COPY ./requirements.txt /app/requirements.txt

RUN chmod +x /app/redis_sl_db.py
RUN pip install --no-cache-dir -r requirements.txt
#user is appuser
ENTRYPOINT ["python", "/app/redis_sl_db.py"]

k8s yaml如下:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: dc-csharp-redis-sl
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      backoffLimit: 5
      template:
        spec:
          containers:
          - name: dc-csharp-redis-sl
            image: dockerhub.xxxxx.com/ops/dc_csharp_redis_sl:0.2
            imagePullPolicy: IfNotPresent
            command: [/app/redis_sl_db.py]
          imagePullSecrets:
          - name: dockerhub  
          restartPolicy: OnFailure

 最后查询mysql表 devops.redis_log数据就可以了

  

标签:DEFAULT,sl,redis,results,查询,time,日志,NULL
来源: https://www.cnblogs.com/5sdba-notes/p/15846568.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有