sentry磁盤占用過大如何清理歷史數據


引用:https://www.phpmianshi.com/?id=182

1、SENTRY數據軟清理 (清理完不會釋放磁盤,如果很長時間沒有運行,清理時間會很長)
Bash

登錄worker容器

docker exec -it sentry_onpremise_worker_1 /bin/bash

保留多少天的數據,cleanup使用delete命令刪除postgresql數據,但對於delete,update等操作,只是將對應行標志為DEAD,並沒有真正釋放磁盤空間

sentry cleanup --days 7
2、POSTGRES數據清理 (清理完后會釋放磁盤空間)
Bash

登錄postgres容器

docker exec -it sentry_onpremise_postgres_1 /bin/bash

運行清理

vacuumdb -U postgres -d postgres -v -f --analyze
3、定時清理腳本
Bash
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/

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

刪除昨天以前的數據

看着是 .log結尾的文件,而且很大,就直接刪除了,結果發現重啟后,sentry無法正常收到上報了。

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

沒辦法,只能重新安裝

Bash
cd /data1/onpremise
./install.sh
重新啟動生效,重新安裝不會清理原有數據,所以不備份也沒關系

Bash
docker-compose down
docker-compose build
docker-compose up -d
5.清理kafka占用磁盤過大的問題
清理kafka占用磁盤過大的問題搜到可以配置 .env,如下,但是我的沒有效果

Bash
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的容器

Bash
docker exec -it sentry_onpremise_kafka_1 /bin/bash

查看topics

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

修改kafka配置文件

vi /etc/kafka/server.properties

修改為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左右

Bash
cd /var/lib/docker/volumes/sentry-kafka/_data/events-0
du -h --max-depth=1
ls -alh # 日期最小的是3天前的日志:00000000000000146071.log
docker容器沒有vi命令的解決方案

Bash
apt-get update
apt-get install vim
6、官方解決方案
其實官方已經提供了解決方案,修改 .env文件的以下配置

Bash
SENTRY_EVENT_RETENTION_DAYS=7
重新安裝即可

詳情參考:https://github.com/getsentry/onpremise

Event Retention
Sentry comes with a cleanup cron job that prunes events older than 90 days by default. If you want to change that, you can change the SENTRY_EVENT_RETENTION_DAYS environment variable in .env or simply override it in your environment. If you do not want the cleanup cron, you can remove the sentry-cleanup service from the docker-compose.ymlfile.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM