Debezium发布历史63

原文地址: https://debezium.io/blog/2019/07/08/tutorial-sentry-debezium-container-images/

欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯.

将 Sentry 添加到 Debezium 容器镜像的教程
2019 年 7 月 8 日 作者: 雷纳托·梅菲
哨兵 码头工人
Debezium最近对其容器镜像的结构进行了巨大改进,使得扩展其行为变得极其简单。

这是一个小教程,展示了如何添加Sentry,“一种开源错误跟踪[软件],可帮助开发人员实时监控和修复崩溃”。在这里,我们将使用它来收集和报告来自 Kafka Connect 及其连接器的任何异常。请注意,这仅适用于 Debezium 0.9+。

我们需要一些东西才能让 Sentry 工作,我们将添加所有这些东西,然后创建一个 Dockerfile,将其全部正确粘合:

配置Log4j

Sentry.io的 SSL 证书,因为默认情况下它不在 JVM 可信链中

和图书馆sentry_sentry-log4j

Log4j 配置
让我们在本地项目中创建一个文件config/log4j.properties ,该文件是 Debezium 映像附带的文件的副本,并向其中添加 Sentry。请注意,我们添加Sentry并log4j.rootLogger创建了该部分log4j.appender.Sentry,其余部分保持原始配置:

kafka.logs.dir=logs

log4j.rootLogger=INFO, stdout, appender, Sentry

Disable excessive reflection warnings - KAFKA-5229

log4j.logger.org.reflections=ERROR

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.threshold=INFO
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} %-5p %X{dbz.connectorType}|%X{dbz.connectorName}|%X{dbz.connectorContext} %m [%c]%n

log4j.appender.appender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.appender.DatePattern=’.'yyyy-MM-dd-HH
log4j.appender.appender.File=${kafka.logs.dir}/connect-service.log
log4j.appender.appender.layout=org.apache.log4j.PatternLayout
log4j.appender.appender.layout.ConversionPattern=%d{ISO8601} %-5p %X{dbz.connectorType}|%X{dbz.connectorName}|%X{dbz.connectorContext} %m [%c]%n

log4j.appender.Sentry=io.sentry.log4j.SentryAppender
log4j.appender.Sentry.threshold=WARN
Sentry.io SSL 证书
从sentry.io下载getsentry.pem文件并将其放入项目目录中的ssl/下。

Dockerfile
现在我们可以将 Debezium 图像中的所有内容粘合在一起:

我们首先使用我们的 Sentry 证书创建一个 JKS 文件;这使用了 Docker 多阶段构建过程,我们在其中生成一个,certificates.jks稍后将其复制到 Kafka Connect with Debezium 阶段

复制log4j.properties到$KAFKA_HOME/config/log4j.properties

从多阶段构建中复制 JKS 文件

使用 Sentry 版本和 m5sums 设置 ENV

下载 Sentry 依赖项,您看到的调用的脚本docker-maven-download是我们默认在映像中提供的帮助程序。在本例中,我们使用它从 Maven Central 下载 JAR 文件并将其放入 Kafka libs 目录中。我们通过设置 ENV var 来做到这一点MAVEN_DEP_DESTINATION=$KAFKA_HOME/libs:
FROM fabric8/java-centos-openjdk8-jdk:1.6 as ssl-jks

ARG JKS_STOREPASS=“any random password, you can also set it outside via the arguments from docker build”

USER root:root

COPY /ssl /ssl

RUN chown -R jboss:jboss /ssl

USER jboss:jboss

WORKDIR /ssl

RUN keytool -import -noprompt -alias getsentry
-storepass “${JKS_STOREPASS}”
-keystore certificates.jks
-trustcacerts -file “/ssl/getsentry.pem”

FROM debezium/connect:0.10 AS kafka-connect

EXPOSE 8083

COPY config/log4j.properties “$KAFKA_HOME/config/log4j.properties”

COPY --from=ssl-jks --chown=kafka:kafka /ssl/certificates.jks /ssl/

ENV SENTRY_VERSION=1.7.23
MAVEN_DEP_DESTINATION=$KAFKA_HOME/libs

RUN docker-maven-download
central io/sentry sentry “KaTeX parse error: Expected 'EOF', got '&' at position 50: …526e2094b9bbde &̲& \ docker-…SENTRY_VERSION” 74af872827bd7e1470fd966449637a77
构建并运行
现在我们可以简单地构建图像:

$ docker build -t debezium/connect-sentry:1 --build-arg=JKS_STOREPASS=“123456789” .
运行图像时,我们现在必须配置 Kafka Connect 应用程序以通过设置加载 JKS 文件KAFKA_OPTS: -Djavax.net.ssl.trustStore=/ssl/certificates.jks -Djavax.net.ssl.trustStorePassword=。

Sentry 可以通过多种方式进行配置,我喜欢通过环境变量来配置,我们可以设置的最小值是 Sentry DSN(指向您的项目所必需的)和实际运行环境名称(即:生产、暂存)。

在这种情况下,我们可以配置变量:SENTRY_DSN=, SENTRY_ENVIRONMENT=dev。

如果您想了解有关使用 Debezium 容器镜像的更多信息,请查看我们的教程。

就是这样,以 Sentry 为例扩展 Docker 设置的基本方法;其他的修改也应该和这个一样简单。作为此设置中来自 Kafka 生产者的异常的示例RecordTooLarge,请参见下图:

哨兵异常示例
结论
由于最近对 Debezium 容器镜像进行了重构,使用自定义扩展来修改它们变得非常容易。下载外部依赖项并将其添加到图像中成为一项微不足道的任务,我们很乐意听到您的反馈!

如果您对重构本身感到好奇,可以在拉取请求debezium/container-images#131中找到详细信息。

你可能感兴趣的:(debezium,FlinkCDC,CDC,数据库,运维,大数据)