Ubuntu下Sentry部署

Sentry作为一款常见以及使用人数较多的监控服务,在接口监控、错误捕捉、错误报警等方面是非常不错的,在此之前我也用过Prometheus监控,各有各的好处,有兴趣的同学可以对这些都了解一下。

安装docker

apt install curl -y
sh -c "$(curl -fsSL https://get.docker.com)"
systemctl start docker
systemctl enable docker

安装docker-compose

# 下载 docker-compose
wget https://github.com/docker/compose/releases/download/1.26.0/docker-compose-Linux-x86_64
# 移到 /usr/local/bin/docker-compose
sudo mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
# 给 docker-compose 执行权限
sudo chmod +x /usr/local/bin/docker-compose

下载安装sentry

wget https://github.com/getsentry/onpremise/archive/refs/tags/21.4.1.tar.gz

tar -zxvf 21.4.1.tar.gz

cd onpremise-21.4.1/

修改 /sentry/config.yml,注意邮箱的tls和ssl只能一个为true

mail.host: 'smtp.exmail.qq.com'
mail.port: 465
mail.username: 'xxx@xxx.com'
mail.password: 'xxx'
mail.use-tls: false
mail.use-ssl: true
#The email address to send on behalf of
mail.from: 'xxx@xxx.com'

修改.env文件,在末尾添加数据自动清理时间,默认90天太长了,不设置也没关系

SENTRY_EVENT_RETENTION_DAYS=14

执行 :

./install.sh

中途会让创建用户

然后执行:

docker-compose up -d

如果想停止sentry服务,执行:

docker-compose down

sentry数据清理

sentry服务部署一段时间后发现剩余磁盘空间越来越小,寻找了很多解决方案,以下两个方案供参考。

方法一

实际上最大的数据是postgres里一个不断增长的表public.nodestore_node,一般发现的时候磁盘基本都被它满了,所以百度到的通用解决方案可能并没有办法执行,所以我们直接将它TRUNCATE掉即可,清空后不会影响后续的业务就行。

首先进入postgres容器

docker exec -it sentry_onpremise_postgres_1 /bin/bash

切换用户

su postgres

进入postgres

psql

清空这个害人的表

TRUNCATE public.nodestore_node;

在清理前后可以查看下这个表占用的空间

SELECT
table_schema || '.' || table_name AS table_full_name,
pg_size_pretty(pg_total_relation_size('"' || table_schema || '"."' || table_name || '"')) AS size
FROM information_schema.tables
ORDER BY
pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') DESC limit 20;

方法二

下方是百度到排名靠前的解决方案,在执行第二步时剩余磁盘空间不足会出现问题,在此记录作为参考。

1、SENTRY数据软清理 (清理完不会释放磁盘,如果很长时间没有运行,清理时间会很长)

登录worker容器

docker exec -it sentry_onpremise_worker_1 /bin/bash

保留多少天的数据,cleanup使用delete命令删除postgresql数据,但对于delete,update等操作,只是将对应行标志为DEAD,并没有真正释放磁盘空间

sentry cleanup --days 7

2、POSTGRES数据清理 (清理完后会释放磁盘空间)

登录postgres容器

docker exec -it sentry_onpremise_postgres_1 /bin/bash

运行清理

vacuumdb -U postgres -d postgres -v -f --analyze

vacuumdb -U postgres -d postgres -t nodestore_node -v -f --analyze

3、定时清理脚本

0 1 * * * cd /data1/onpremise && { time docker-compose run --rm worker cleanup --days 7; } &> /var/log/cleanup.log
0 8 * * * { time docker exec -i $(docker ps --format "table {{.Names}}"|grep postgres) vacuumdb -U postgres -d postgres -v -f --analyze; } &> /data1/logs/vacuumdb.log

4、异常处理

因为磁盘已经被占满,所以上面的清理命令也执行不动了,没办法只能自己寻找大文件临时删除一些,于是找到了下面的大文件

/var/lib/docker/volumes/sentry-kafka/_data/events-0/*.log

看着是 .log结尾的文件,而且很大,就直接删除了,结果发现重启后,sentry无法正常收到上报了。

参考:https://forum.sentry.io/t/sentry-disk-cleanup-kafka/11337

没办法,只能重新安装

cd /data1/onpremise

./install.sh

重新启动生效,重新安装不会清理原有数据,所以不备份也没关系

docker-compose down

docker-compose build

docker-compose up -d

5、清理kafka占用磁盘过大的问题

清理kafka占用磁盘过大的问题搜到可以配置 .env,如下,但是我的没有效果

KAFKA_LOG_RETENTION_HOURS=24

KAFKA_LOG_RETENTION_BYTES=53687091200 #50G

KAFKA_LOG_SEGMENT_BYTES=1073741824 #1G

KAFKA_LOG_RETENTION_CHECK_INTERVAL_MS=300000

KAFKA_LOG_SEGMENT_DELETE_DELAY_MS=60000

于是自己研究,首先进入kafka的容器

docker exec -it sentry_onpremise_kafka_1 /bin/bash

查看topics

kafka-topics --list --zookeeper zookeeper:2181

修改kafka配置文件

vi server.propertyies

修改为7小时 默认168

log.retention.hours=7

log.cleaner.enable=true

log.cleanup.policy=delete

log.cleanup.interval.mins=1

重启

kafka-server-stop

kafka-server-start -daemon

重启后过了一会也没效果,第二天才看到效果,具体原因有待研究,再去查看目录的大小,发小从20G下降到12G左右

cd /var/lib/docker/volumes/sentry-kafka/_data/events-0

du -h --max-depth=1

ls -alh # 日期最小的是3天前的日志:00000000000000146071.log

docker容器没有vi命令的解决方案

apt-get update

apt-get install vim

6、官方解决方案

其实官方已经提供了解决方案,修改 .env文件的以下配置

SENTRY_EVENT_RETENTION_DAYS=7

重新安装即可

详情参考:https://github.com/getsentry/onpremise

使用docker-compose部署Sentry(附Sentry数据清理)的更多相关文章

  1. Docker Compose部署GitLab服务,搭建自己的代码托管平台(图文教程)

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  2. Docker Compose 部署 Redis 及原理讲解 | 懒人屋

    原文:Docker Compose 部署 Redis 及原理讲解 | 懒人屋 Docker Compose 部署 Redis 及原理讲解  4.4k  字    16  分钟    2019-10-1 ...

  3. Docker Compose部署项目到容器-基于Tomcat和mysql的项目yml配置文件代码

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  4. 使用Docker Compose 部署Nexus后初次登录账号密码不正确,并且在nexus-data下没有admin,password

    场景 Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/ ...

  5. Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程)

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  6. Docker Compose部署Nexus3时的docker-compose,yml代码

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  7. 使用Docker Compose 部署Nexus后提示:Unable to create directory /nexus-data/instance

    场景 Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/ ...

  8. 基于Docker Compose部署分布式MinIO集群

    一.概述 Minio 是一个基于Go语言的对象存储服务.它实现了大部分亚马逊S3云存储服务接口,可以看做是是S3的开源版本,非常适合于存储大容量非结构化的数据,例如图片.视频.日志文件.备份数据和容器 ...

  9. 使用Docker Compose部署基于Sentinel的高可用Redis集群

    使用Docker Compose部署基于Sentinel的高可用Redis集群 https://yq.aliyun.com/articles/57953 Docker系列之(五):使用Docker C ...

  10. Docker Compose 部署前后端分离应用

    部署前后端分离应用 容器化 Abp 应用 关于 Abp 应用的容器化,其实和普通的 ASP.NET Core 应用差不多,大家可以参考我此前的文章. 唯一需要注意的是:因为 Abp 解决方案中有多个项 ...

随机推荐

  1. linux菜鸡学习之路

    Linux入门 Linux 介绍 1.Linux怎么读 2.Linux是一款操作系统,免费,开源,安全,高效,稳定,处理高并发非常强悍. Linux文件系统目录 基本介绍 linux的文件系统树状目录 ...

  2. Java的反射机制一

    Java具有一定的动态性,我们可以利用反射机制,字节码操作来获得类似动态语言的特性. 动态操作对象,构造方法,属性,方法 Demo2 如何取得属性和方法以及构造器 public class Demo2 ...

  3. 了解Javascript中函数作为对象的魅力

    前言 Javascript赋予了函数非常多的特性,其中最重要的特性之一就是将函数作为第一型的对象.那就意味着在javascript中函数可以有属性,可以有方法, 可以享有所有对象所拥有的特性.并且最重 ...

  4. 『心善渊』Selenium3.0基础 — 28、unittest中测试套件的使用

    目录 1.测试套件的作用 2.使用测试套件 (1)入门示例 (2)根据不同的条件加载测试用例(了解) (3)常用方式(推荐) 1.测试套件的作用 在我们实际工作,使用unittest框架会有两个问题: ...

  5. ARTS第三周

    第三周.上周欠下了 赶紧补上,糟糕了 还有第四篇也得加紧了 难受. 1.Algorithm:每周至少做一个 leetcode 的算法题2.Review:阅读并点评至少一篇英文技术文章3.Tip:学习至 ...

  6. Adaptive AUTOSAR 学习笔记 7 - 应用设计和 Manifest

    本系列学习笔记基于 AUTOSAR Adaptive Platform 官方文档 R20-11 版本 AUTOSAR_EXP_PlatformDesign.pdf 缩写 AP:AUTOSAR Adap ...

  7. 高校表白App-团队冲刺第一天

    今天要做什么 今天要再次重新的好好学一下Activity的生命周期,简单的写一个Activity,熟悉Activity的线程. 遇到的问题 在点击事件发生时,在activity进行finish()后, ...

  8. fork、父进程和子进程

    进程 什么是进程?进程是一个运行中的程序实体,拥有独立的堆栈.内存空间和逻辑控制流. 这是标准的进程概念.让我们通过操作系统的fork函数看看这个抽象的概念是怎么在进程的实现中体现出来的. 构成要素 ...

  9. 【LeetCode】61. 旋转链表

    61. 旋转链表 知识点:链表: 题目描述 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置. 示例 输入:head = [1,2,3,4,5], k = 2 输出:[4 ...

  10. vue2.x移动端ui框架选型

    前言 最近公司准备做移动端spa项目,需要选一个ui框架.优先考虑谷歌Material Design设计风格.针对市面上的框架进行了一次调研,简单总结如下. 选型原则:1. 优先考虑md风格. 2. ...