shell脚本-sentry(docker部署)的日常维护

前言

我们采用了官方的docker-compose安装sentry,但服务器内存大小有限,所以调优了内存使用;
日常使用过程中也发现了容器内有屏显日志输出,导致占用了大量磁盘空间,但安装docker之前没有及时限制日志大小;
所以提供了以下脚本进行容器内存和日志的自动运维操作

介绍

sentry是一个开源的监控系统,能支持服务端与客户端的监控,还有个强大的后台错误分析、报警平台。
github: https://github.com/getsentry/onpremise.git

脚本功能

  1. sentry容器日志清理
  2. 自动重启超过95%内存的sentry容器

软件环境


# uname -a
Linux 10-40-0-211 3.10.0-1160.49.1.el7.x86_64 #1 SMP Tue Nov 30 15:51:32 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

# docker --version
Docker version 20.10.12, build e91ed57

# docker ps|awk '{print $2" "$NF}'
ID NAMES
getsentry/snuba:nightly sentry_onpremise_snuba-subscription-consumer-transactions_1
getsentry/snuba:nightly sentry_onpremise_snuba-subscription-consumer-events_1
registry.2haohr.com/maintenance/portainer/agent:2.13.1 portainer_agent
nginx:1.21.0-alpine sentry_onpremise_nginx_1
getsentry/relay:nightly sentry_onpremise_relay_1
sentry-cleanup-onpremise-local sentry_onpremise_sentry-cleanup_1
getsentry/sentry:nightly sentry_onpremise_post-process-forwarder_1
getsentry/sentry:nightly sentry_onpremise_ingest-consumer_1
getsentry/sentry:nightly sentry_onpremise_subscription-consumer-transactions_1
getsentry/sentry:nightly sentry_onpremise_cron_1
snuba-cleanup-onpremise-local sentry_onpremise_snuba-transactions-cleanup_1
snuba-cleanup-onpremise-local sentry_onpremise_snuba-cleanup_1
symbolicator-cleanup-onpremise-local sentry_onpremise_symbolicator-cleanup_1
getsentry/symbolicator:nightly sentry_onpremise_symbolicator_1
getsentry/snuba:nightly sentry_onpremise_snuba-consumer_1
getsentry/snuba:nightly sentry_onpremise_snuba-outcomes-consumer_1
getsentry/snuba:nightly sentry_onpremise_snuba-sessions-consumer_1
getsentry/snuba:nightly sentry_onpremise_snuba-replacer_1
getsentry/snuba:nightly sentry_onpremise_snuba-api_1
getsentry/snuba:nightly sentry_onpremise_snuba-transactions-consumer_1
memcached:1.6.9-alpine sentry_onpremise_memcached_1
confluentinc/cp-zookeeper:5.5.0 sentry_onpremise_zookeeper_1
redis:6.2.4-alpine sentry_onpremise_redis_1
tianon/exim4 sentry_onpremise_smtp_1
getsentry/sentry:nightly sentry_onpremise_worker_1
getsentry/sentry:nightly sentry_onpremise_subscription-consumer-events_1
getsentry/sentry:nightly sentry_onpremise_web_1
confluentinc/cp-kafka:5.5.0 sentry_onpremise_kafka_1
postgres:9.6 sentry_onpremise_postgres_1
yandex/clickhouse-server:20.3.9.70 sentry_onpremise_clickhouse_1
registry.2haohr.com/maintenance/node-exporter:1.3.1 node_exporter
registry.2haohr.com/maintenance/cadvisor:v0.39.3 cadvisor

脚本

[root@10-40-0-211 ~]# cat /etc/cron.hourly/restart_sentry_container.sh

#!/bin/env bash
#*************************************
#Author:                huangjinsheng
#Email:                 1656126280@qq.com
#Version:               1.0
#Created Time:          2022-07-11 11:49:57
#description:           xxx script
#Copyright© 2016-2022   1656126280@qq.com All Rights Reserved
#*************************************

#加载全局变量
source /etc/profile

#################
## 日志清理

#自定义日志大小为313M
Docker_log_Size_customize="327561592";

#遍历 sentry 相关的容器
for Docker_container in `docker ps|grep -Ei "sentry"|awk '{print $NF}'`;
do

        #每周一执行清理容器日志
        if [ $(date +%w) -ne 1 ];then
                continue
        fi

        #获取container日志路径
        Docker_logPath=$(docker inspect ${Docker_container}|  jq .[].LogPath -r);

        #获取container日志大小
        Docker_log_Size=$(ls -lg ${Docker_logPath}|awk '{print $4}')

        #如果container日志大于指定大小,则轮转日志
        if [ "${Docker_log_Size}" -ge "${Docker_log_Size_customize}" ];then
                truncate -s ${Docker_log_Size_customize} ${Docker_logPath}
        fi

done



#################
## 容器重启

#获取内存大于95的容器
container_value=$(`which docker` stats --no-stream|grep -Ei "sentry"|awk '{if($7>95){print $2}}')

#没有获取到容器列表则退出
if [ -z "${container_value}" ];then
	break
fi

#重启容器
for i in ${container_value}
do

	`which docker` restart ${i} 

done
posted @ 2022-07-11 17:36  爱折腾的大臭臭  阅读(343)  评论(0编辑  收藏  举报