Node.js 的 Sentry SDK 在 Docker 容器内运行时无法将事件发送到 Sentry 服务器。我对在我的 DigitalOcean Ubuntu 20.04 VPS 上运行容器化设置相当陌生,因此非常感谢任何帮助!
错误:
Sentry Logger [Log]: [Tracing] starting gql transaction - GET_REFRESH_TOKEN
Sentry Logger [Log]: [Tracing] Finishing gql transaction: GET_REFRESH_TOKEN.
Sentry Logger [Error]: Error while sending event: Error: connect ETIMEDOUT 34.120.195.249:443
IP 是来自 Sentry 的预期,可在此处找到:https://docs.sentry.io/product/security/ip-ranges/#event-ingestion .相关设置:
Sentry 初始化
{
dsn: 'https://<secret>@<secret>.ingest.sentry.io/<secret>',
environment: 'Testing',
debug: true,
integrations: [ Http { name: 'Http', _breadcrumbs: true, _tracing: true } ],
tracesSampleRate: 1,
_metadata: {
sdk: {
name: 'sentry.javascript.node',
packages: [Array],
version: '6.13.3'
}
}
}
Docker 撰写文件 version: '3'
services:
frontend:
#...
api:
container_name: api-${COMPOSE_PROJECT_NAME}
restart: always
build:
context: ./api
dockerfile: Dockerfile.prod
env_file:
- .env
environment:
API_PORT: 3001
DB_HOST: db
DB_PORT: 5432
DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}?schema=${DB_SCHEMA}
depends_on:
- db
ports:
- ${API_PORT_INTERNAL}:3001
volumes:
- ./api:/app
- /app/node_modules
db:
#...
API Dockerfile FROM node:14 AS builder
# Create app directory
WORKDIR /app
COPY package*.json ./
COPY prisma ./prisma/
RUN npm install
RUN npx prisma generate
COPY . .
# Latest LTS version
FROM node:14
# Set default values for environment variables
ENV API_PORT=3001
COPY . .
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package*.json ./
# Bind port
EXPOSE 3001
# Start server
CMD ["npm", "start"]
如果需要更多详细信息,我将附加此列表。
最佳答案
经过更多调查后的自我回答:
事实证明,来自容器内的所有外部网络访问都被阻止了。 Sentry 的使用只是第一次有必要。
问题
在配置 VPS 防火墙 (UFW) 时,Docker 绕过了防火墙并暴露了不需要的端口。为了解决这个问题,我禁用了 iptables
完全在 /etc/docker/daemon.json
:
{
"iptables": false
}
这可以完成工作,但会阻止来自容器内的所有外部网络访问。解决方案
解决方案的所有学分都转到@Feng his answer here回答以下问题:What is the best practice of docker + ufw under Ubuntu .
解决方案是删除
iptables = false
选项并在 UFW 配置中正确修复它。您可以按照他的帖子中所述手动执行此操作,也可以像我一样使用他的工具:https://github.com/chaifeng/ufw-docker .TL;DR
"iptables": false
来自 /etc/docker/daemon.json
关于node.js - 无法在 Node.js Docker 容器中发送 Sentry 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69801317/