sentry常见运维问题
sentry简介
sentry-self-hosted目录概览
├─.env # 环境变量配置文件,用于设置环境变量。
├─README.md # 项目的主要说明文档,包含安装、配置和使用说明。
├─docker-compose.yml # Docker Compose 配置文件,用于定义和运行多个 Docker 容器服务。
├─install.sh # 安装脚本,用于初始化和安装 Sentry。
├─sentry-admin.sh # Sentry 管理脚本,用于执行常见管理任务。
├─symbolicator # Symbolicator 目录,用于处理原始符号化文件(debug symbols)。
├─sentry # Sentry 服务相关的目录,包含构建文件和配置文件。
| ├─Dockerfile # Sentry 的 Docker 镜像定义文件。
| ├─config.example.yml # Sentry 的示例配置文件。
| ├─enhance-image.example.sh # 示例脚本,用于增强 Docker 镜像。
| ├─entrypoint.sh # 容器入口脚本,用于初始化 Sentry 容器。
| ├─requirements.example.txt # 示例依赖文件,列出了需要安装的 Python 库。
| └sentry.conf.example.py # Sentry 的示例 Python 配置文件。
├─scripts # 管理和维护脚本的目录。
| ├─_lib.sh # 常用函数库脚本。
| ├─backup.sh # 备份脚本,用于备份 Sentry 数据。
| ├─bump-version.sh # 版本更新脚本,用于更新项目版本。
| ├─post-release.sh # 发布后脚本,用于发布后的处理。
| ├─reset.sh # 重置脚本,用于重置 Sentry 环境。
| └restore.sh # 恢复脚本,用于恢复 Sentry 数据。
├─relay # Relay 服务相关的目录,包含配置文件。
├─postgres # Postgres 数据库相关的目录,包含初始化和入口脚本。
| ├─init_hba.sh # 初始化 HBA (Host-Based Authentication) 配置的脚本。
| └postgres-entrypoint.sh # Postgres 容器入口脚本。
├─nginx # Nginx 服务相关的目录,包含配置文件。
├─jq # JQ 工具相关的目录,用于处理 JSON 数据。
| └Dockerfile # 用于构建 JQ 工具的 Dockerfile。
├─install # 安装和设置脚本的目录。
| ├─_lib.sh # 安装相关的函数库脚本。
| ├─_min-requirements.sh # 最低要求检查脚本。
| ├─bootstrap-snuba.sh # 初始化 Snuba 的脚本。
| ├─build-docker-images.sh # 构建 Docker 镜像的脚本。
| ├─check-latest-commit.sh # 检查最新提交的脚本。
| ├─check-minimum-requirements.sh # 检查最低要求的脚本。
| ├─create-docker-volumes.sh # 创建 Docker 卷的脚本。
| ├─create-kafka-topics.sh # 创建 Kafka 主题的脚本。
| ├─dc-detect-version.sh # 检测 Docker Compose 版本的脚本。
| ├─detect-platform.sh # 检测平台的脚本。
| ├─ensure-files-from-examples.sh # 确保示例文件存在的脚本。
| ├─ensure-relay-credentials.sh # 确保 Relay 凭证存在的脚本。
| ├─error-handling.sh # 错误处理脚本。
| ├─generate-secret-key.sh # 生成秘密密钥的脚本。
| ├─geoip.sh # GeoIP 数据库处理脚本。
| ├─install-wal2json.sh # 安装 wal2json 的脚本。
| ├─parse-cli.sh # 解析 CLI 参数的脚本。
| ├─set-up-and-migrate-database.sh # 设置和迁移数据库的脚本。
| ├─turn-things-off.sh # 关闭服务的脚本。
| ├─update-docker-images.sh # 更新 Docker 镜像的脚本。
| ├─upgrade-postgres.sh # 升级 Postgres 的脚本。
| └wrap-up.sh # 安装结束后的处理脚本。
├─geoip # GeoIP 数据库相关的目录。
├─cron # Cron 服务相关的目录,包含构建文件和脚本。
| ├─Dockerfile # 用于构建 Cron 容器的 Dockerfile。
| ├─entrypoint.sh # Cron 容器入口脚本。
| └sources.list # 用于 Cron 容器的源列表。
├─clickhouse # Clickhouse 服务相关的目录,包含构建文件和配置文件。
| ├─Dockerfile # 用于构建 Clickhouse 容器的 Dockerfile。
| └config.xml # Clickhouse 的配置文件。
├─certificates # 证书相关的目录。
| └.gitignore # 忽略证书文件的 Git 配置。
二 : sentry的服务器垃圾清理
2.1 常规日志清理
常规日志清理 : 运行查看每个服务的日志docker compose logs <service_name>。您可以使用-f标志“跟踪”日志的传入,并使用标志-t获取时间戳。如果您不传递任何服务名称,您将获得所有正在运行的服务的日志。
2.2 设置容器日志大小
如果你怀疑 Docker 容器日志的持久化日志占用了大量磁盘空间,你可以通过配置文件来配置 Docker 上持久化日志的数量/etc/docker/daemon.json。如果该文件不存在,你可以自行创建。
{
"log-driver": "local",
"log-opts": { "max-size": "10m", "max-file": "3" }
}
要应用新的 Docker 守护程序配置,请使用 重新启动 Docker 服务systemctl restart docker。
如果您想要删除即时 Docker 日志,您可以以root用户身份执行此操作:
truncate -s 0 /var/lib/docker/containers/**/*-json.log
2.3 容器健康检查
Docker 容器的健康检查
在某些情况下,您可能希望根据自己的需求增加或减少健康检查间隔、超时或重试次数。这可以通过编辑中的HEALTHCHECK_INTERVAL、HEALTHCHECK_TIMEOUT、HEALTHCHECK_RETRIES变量的值来实现.env。
有时,你可能会看到这样的错误
container for service "${servicename}" is unhealthy
2.4 清理database
Postgres
Postgres 用于主数据存储,以及用于存储键/值数据的节点存储nodestore_node。该表可以快速增长,尤其是在大量使用性能监控功能时,因为跟踪数据存储在此表中。
作为任务的一部分,表格nodestore_node被清理cleanup,但是 Postgres 可能没有机会清理表格(特别是在重负载下),因此即使行可能被删除,它们仍然会占用磁盘空间。
您可以使用pg-repack它来实时重新打包表,方法是创建新表并复制数据,然后再删除旧表。您需要在清理脚本之后运行它,并注意,在它创建表时,磁盘使用率会激增,然后才会下降。
以下是示例脚本:
# Only keep the last 7 days of nodestore data. We heavily use performance monitoring.
docker compose run --rm -T web cleanup --days 7 -m nodestore -l debug
# This ensures pg-repack exists before running as the container gets recreated on upgrades
docker compose run --rm -T postgres bash -c "apt update && apt install -y --no-install-recommends postgresql-14-repack && su postgres -c 'pg_repack -E info -t nodestore_node'"
如果上述脚本仍未清理出足够的磁盘空间,您可以在 Postgres 中尝试以下操作。这将导致事件详细信息中的数据丢失。SENTRY_RETENTION_DAYS需要手动填写。
DELETE FROM public.nodestore_node WHERE "timestamp" < NOW() - INTERVAL '[SENTRY_RETENTION_DAYS]';
VACUUM FULL public.nodestore_node;
VACUUM FULL 会主动压缩表,方法是写入一个完整的新版本的表文件,其中没有死空间。这可以最小化表的大小,但可能需要很长时间。它还需要额外的磁盘空间来存储表的新副本,直到操作完成。
2.5 清理kafka
出现kafka问题的原因有
- 磁盘空间或内存不足
- 持续的事件高峰导致非常长的处理时间,从而导致 Kafka 在消息超过保留时间时丢弃消息
- 由于重启或暂停/恢复循环导致日期/时间不同步问题
比如:
Exception: KafkaError{code=OFFSET_OUT_OF_RANGE,val=1,str="Broker: Offset out of range"}
解决 :
获取消费者list
docker compose run --rm kafka kafka-consumer-groups --bootstrap-server kafka:9092 --list
获取群组info
docker compose run --rm kafka kafka-consumer-groups --bootstrap-server kafka:9092 --group snuba-consumers --describe
重新指针偏移为空
docker compose run --rm kafka kafka-consumer-groups --bootstrap-server kafka:9092 --group snuba-consumers --topic events --reset-offsets --to-latest --dry-run
指针设置成最新
docker compose run --rm kafka kafka-consumer-groups --bootstrap-server kafka:9092 --group snuba-consumers --topic events --reset-offsets --to-latest --execute
如果上述解决不了问题尝试重新安装kafka
将偏移量设置为最新并执行
docker compose run --rm kafka kafka-consumer-groups --bootstrap-server kafka:9092 --all-groups --all-topics --reset-offsets --to-latest --execute
0. 停止实例:
docker compose down --volumes
-
删除 Kafka 和 Zookeeper 相关卷:
docker volume rm sentry-kafka docker volume rm sentry-zookeeper -
再次运行安装脚本:
./install.sh -
启动实例:
docker compose up -d
2.6 自动清理脚本
一个自动清理日志脚本(不包含数据库和docker) 定时运行即可
#!/bin/bash
# Get all container IDs
container_ids=$(docker ps -a --format "{{.ID}}")
# Function to clean logs for a container
clean_logs() {
container_id=$1
echo "Cleaning logs for container ID: $container_id"
# Get log path
log_path=$(docker inspect --format='{{.LogPath}}' $container_id)
# Check if log file exists
if [ -f "$log_path" ]; then
# Get log file size
log_size=$(du -h "$log_path" | awk '{print $1}')
echo "Log file size for container ID $container_id: $log_size"
# Remove log file
# sudo rm "$log_path"
echo "Log file for container ID $container_id deleted."
else
echo "Log file for container ID $container_id not found."
fi
}
# Loop through each container ID and clean its logs
for container_id in $container_ids
do
clean_logs $container_id
done
三. sentry接入流程
3.1 clone代码到服务器
在sentry官网下载下面的压缩包传递到服务器
改少量配置即可使用
./self-hosted/cron
目前下面的镜像源是修改后可用的
deb http://mirrors.163.com/debian/ buster main non-free contrib
deb http://mirrors.163.com/debian/ buster-updates main non-free contrib
deb http://mirrors.163.com/debian/ oldstable-backports main non-free contrib
deb http://mirrors.163.com/debian-security/ buster/updates main non-free contrib
deb http://mirrors.163.com/debian/ bookworm main non-free contrib
deb http://mirrors.163.com/debian/ bookworm-updates main non-free contrib
deb http://mirrors.163.com/debian-security/ bookworm-security main non-free contrib
deb-src http://mirrors.163.com/debian/ buster main non-free contrib
deb-src http://mirrors.163.com/debian/ buster-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ oldstable-backports main non-free contrib
deb-src http://mirrors.163.com/debian-security/ buster/updates main non-free contrib
deb-src http://mirrors.163.com/debian/ bookworm main non-free contrib
deb-src http://mirrors.163.com/debian/ bookworm-updates main non-free contrib
deb-src http://mirrors.163.com/debian-security/ bookworm-security main non-free contrib
./self-hosted/jq
deb http://mirrors.163.com/debian/ buster main non-free contrib
deb http://mirrors.163.com/debian/ buster-updates main non-free contrib
deb http://mirrors.163.com/debian/ oldstable-backports main non-free contrib
deb http://mirrors.163.com/debian-security/ buster/updates main non-free contrib
deb http://mirrors.163.com/debian/ bookworm main non-free contrib
deb http://mirrors.163.com/debian/ bookworm-updates main non-free contrib
deb http://mirrors.163.com/debian-security/ bookworm-security main non-free contrib
deb-src http://mirrors.163.com/debian/ buster main non-free contrib
deb-src http://mirrors.163.com/debian/ buster-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ oldstable-backports main non-free contrib
deb-src http://mirrors.163.com/debian-security/ buster/updates main non-free contrib
deb-src http://mirrors.163.com/debian/ bookworm main non-free contrib
deb-src http://mirrors.163.com/debian/ bookworm-updates main non-free contrib
deb-src http://mirrors.163.com/debian-security/ bookworm-security main non-free contrib
执行install.sh即可安装