前端监控项目环境搭建-Kafka

打印 上一主题 下一主题

主题 546|帖子 546|积分 1638

目次
如何把 Docker 容器封装成镜像
Docker 摆设 Kafka 集群(mac) 
Centos 容器启动 rsyslog 服务
Rsyslog 转发日志至 Kafka 
node-rdkafka@2.18.0 使用文档 
Librdkafka@2.3.0 国内仓库


如何把 Docker 容器封装成镜像

配景:centos 容器中运行 nginx + rsyslog,另一容器运行 Kafka。centos 容器 rsyslog 无法向 Kafka 生产消息。
要将一个容器封装成一个镜像,你需要使用 Docker 提供的 docker commit 命令。这个命令会基于容器的当前状态创建一个新的镜像。
下面是使用 docker commit 命令的基本步调:
1. 首先,确保你有一个正在运行的容器。你可以通过运行 docker ps 来查察当前运行的容器。
2. 使用 docker commit 命令创建镜像。命令的格式如下:
  1. docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
复制代码
其中:


  • [OPTIONS] 是可选的,可以用来指定新镜像的分析等信息。
  • CONTAINER 是要提交的容器的ID或名称。
  • [REPOSITORY[:TAG]] 是新镜像的名称和可选的标签。如果不指定标签,默认标签是latest。
例如,如果你有一个名为 my_container 的容器,你想将它封装成名为 my_image 的镜像,并且标签为 v1.0,你可以运行:
  1. docker commit my_container my_image:v1.0
复制代码
3. 运行命令后,使用 docker images 命令可以查察新创建的镜像。
下面是一个简单的例子:
  1. # 创建并运行一个容器docker run -d --name my_container ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done" # 提交容器到镜像docker commit my_container my_image:v1.0
  2. # 查察创建的镜像docker images
复制代码
实验上述步调后,你就会有一个包罗了特定输出的镜像 my_image:v1.0。 
Docker 摆设 Kafka 集群(mac) 

1. 集群规划
hostnameip addrportlistener
zook1172.20.10.112183:2181
zook2172.20.10.122184:2181
zook3172.20.10.132185:2181
kafka1172.20.10.14内部 9093:9093,外部 9193:9193
kafka2172.20.10.15内部 9094:9094,外部 9194:9194
kafka3172.20.10.16内部 9095:9095,外部 9195:9195
2. 创建网络
  1. # 配合命令:
  2. docker network create --driver bridge --subnet 172.20.10.0/25 --gateway 172.20.10.1  zk_network
复制代码
如安在 Docker 中管理和配置容器的网络_怎么修改容器的网络-CSDN博客 
3. 编写 docker 文件
  1. # zk-docker-compose.yml
  2. version: '3.4'
  3. services:
  4.   zook1:
  5.     image: zookeeper:latest
  6.     #restart: always #自动重新启动
  7.     hostname: zook1
  8.     container_name: zook1 #容器名称,方便在rancher中显示有意义的名称
  9.     ports:
  10.       - 2183:2181 #将本容器的zookeeper默认端口号映射出去
  11.     volumes:
  12.       # 挂载数据卷 前面是宿主机即本机的目录位置,后面是docker的目录
  13.       - "./zook1/data:/data"
  14.       - "./zook1/datalog:/datalog"
  15.       - "./zook1/logs:/logs"
  16.     environment:
  17.       ZOO_MY_ID: 1 #即是zookeeper的节点值,也是kafka的brokerid值
  18.       ZOO_SERVERS: server.1=zook1:2888:3888;2181 server.2=zook2:2888:3888;2181 server.3=zook3:2888:3888;2181
  19.     networks:
  20.       zk_network:
  21.         ipv4_address: 172.20.10.11
  22.   zook2:
  23.     image: zookeeper
  24.     #restart: always #自动重新启动
  25.     hostname: zook2
  26.     container_name: zook2 #容器名称,方便在rancher中显示有意义的名称
  27.     ports:
  28.       - 2184:2181 #将本容器的zookeeper默认端口号映射出去
  29.     volumes:
  30.       - "./zook2/data:/data"
  31.       - "./zook2/datalog:/datalog"
  32.       - "./zook2/logs:/logs"
  33.     environment:
  34.       ZOO_MY_ID: 2 #即是zookeeper的节点值,也是kafka的brokerid值
  35.       ZOO_SERVERS: server.1=zook1:2888:3888;2181 server.2=zook2:2888:3888;2181 server.3=zook3:2888:3888;2181
  36.     networks:
  37.       zk_network:
  38.         ipv4_address: 172.20.10.12
  39.   zook3:
  40.     image: zookeeper
  41.     #restart: always #自动重新启动
  42.     hostname: zook3
  43.     container_name: zook3 #容器名称,方便在rancher中显示有意义的名称
  44.     ports:
  45.       - 2185:2181 #将本容器的zookeeper默认端口号映射出去
  46.     volumes:
  47.       - "./zook3/data:/data"
  48.       - "./zook3/datalog:/datalog"
  49.       - "./zook3/logs:/logs"
  50.     environment:
  51.       ZOO_MY_ID: 3 #即是zookeeper的节点值,也是kafka的brokerid值
  52.       ZOO_SERVERS: server.1=zook1:2888:3888;2181 server.2=zook2:2888:3888;2181 server.3=zook3:2888:3888;2181
  53.     networks:
  54.       zk_network:
  55.         ipv4_address: 172.20.10.13
  56. networks:
  57.   zk_network:
  58.     name: zk_network
  59.     external: true
复制代码
  1. # kafka-docker-compose.yml
  2. version: '2'
  3. services:
  4.   kafka1:
  5.     image: wurstmeister/kafka
  6.     restart: always #自动重新启动
  7.     hostname: kafka1
  8.     container_name: kafka1
  9.     ports:
  10.       - 9093:9093
  11.       - 9193:9193
  12.     environment:
  13.       KAFKA_BROKER_ID: 1
  14.       KAFKA_LISTENERS: INSIDE://:9093,OUTSIDE://:9193
  15.       #KAFKA_ADVERTISED_LISTENERS=INSIDE://<container>:9092,OUTSIDE://<host>:9094
  16.       KAFKA_ADVERTISED_LISTENERS: INSIDE://172.20.10.14:9093,OUTSIDE://localhost:9193
  17.       KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
  18.       KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
  19.       KAFKA_ZOOKEEPER_CONNECT: zook1:2181,zook2:2181,zook3:2181
  20.       ALLOW_PLAINTEXT_LISTENER: 'yes'
  21.       JMX_PORT: 9999 #开放JMX监控端口,来监测集群数据
  22.     volumes:
  23.       - ./kafka1/wurstmeister/kafka:/wurstmeister/kafka
  24.       - ./kafka1/kafka:/kafka
  25.     external_links:
  26.       - zook1
  27.       - zook2
  28.       - zook3
  29.     networks:
  30.       zk_network:
  31.         ipv4_address: 172.20.10.14
  32.   kafka2:
  33.     image: wurstmeister/kafka
  34.     restart: always #自动重新启动
  35.     hostname: kafka2
  36.     container_name: kafka2
  37.     ports:
  38.       - 9094:9094
  39.       - 9194:9194
  40.     environment:
  41.       KAFKA_BROKER_ID: 2
  42.       KAFKA_LISTENERS: INSIDE://:9094,OUTSIDE://:9194
  43.       #KAFKA_ADVERTISED_LISTENERS=INSIDE://<container>:9092,OUTSIDE://<host>:9094
  44.       KAFKA_ADVERTISED_LISTENERS: INSIDE://172.20.10.15:9094,OUTSIDE://localhost:9194
  45.       KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
  46.       KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
  47.       KAFKA_ZOOKEEPER_CONNECT: zook1:2181,zook2:2181,zook3:2181
  48.       ALLOW_PLAINTEXT_LISTENER: 'yes'
  49.       JMX_PORT: 9999 #开放JMX监控端口,来监测集群数据
  50.     volumes:
  51.       - ./kafka2/wurstmeister/kafka:/wurstmeister/kafka
  52.       - ./kafka2/kafka:/kafka
  53.     external_links:
  54.       - zook1
  55.       - zook2
  56.       - zook3
  57.     networks:
  58.       zk_network:
  59.         ipv4_address: 172.20.10.15
  60.   kafka3:
  61.     image: wurstmeister/kafka
  62.     restart: always #自动重新启动
  63.     hostname: kafka3
  64.     container_name: kafka3
  65.     ports:
  66.       - 9095:9095
  67.       - 9195:9195
  68.     environment:
  69.       KAFKA_BROKER_ID: 3
  70.       KAFKA_LISTENERS: INSIDE://:9095,OUTSIDE://:9195
  71.       #KAFKA_ADVERTISED_LISTENERS=INSIDE://<container>:9092,OUTSIDE://<host>:9094
  72.       KAFKA_ADVERTISED_LISTENERS: INSIDE://172.20.10.16:9095,OUTSIDE://localhost:9195
  73.       KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
  74.       KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
  75.       KAFKA_ZOOKEEPER_CONNECT: zook1:2181,zook2:2181,zook3:2181
  76.       ALLOW_PLAINTEXT_LISTENER: 'yes'
  77.       JMX_PORT: 9999 #开放JMX监控端口,来监测集群数据
  78.     volumes:
  79.       - ./kafka3/wurstmeister/kafka:/wurstmeister/kafka
  80.       - ./kafka3/kafka:/kafka
  81.     external_links:
  82.       - zook1
  83.       - zook2
  84.       - zook3
  85.     networks:
  86.       zk_network:
  87.         ipv4_address: 172.20.10.16
  88. networks:
  89.   zk_network:
  90.     name: zk_network
  91.     external: true
复制代码
  1. # kafka-manager-docker-compose.yml
  2. version: '2'
  3. services:
  4.   kafka-manager:
  5.     image: scjtqs/kafka-manager:latest
  6.     restart: always
  7.     hostname: kafka-manager
  8.     container_name: kafka-manager
  9.     ports:
  10.       - 9000:9000
  11.     external_links:
  12.       # 连接本compose文件以外的container
  13.       - zook1
  14.       - zook2
  15.       - zook3
  16.       - kafka1
  17.       - kafka2
  18.       - kafka3
  19.     environment:
  20.       ZK_HOSTS: zook1:2181,zook2:2181,zook3:2181
  21.       KAFKA_BROKERS: kafka1:9093,kafka2:9094,kafka3:9095
  22.       APPLICATION_SECRET: letmein
  23.       KM_ARGS: -Djava.net.preferIPv4Stack=true
  24.     networks:
  25.       zk_network:
  26.         ipv4_address: 172.20.10.10
  27. networks:
  28.   zk_network:
  29.     name: zk_network
  30.     external: true
复制代码
4. 在文件目次下,依次 启动docker 文件
  1. docker compose -p zookeeper -f ./zk-docker-compose.yml up -d
复制代码
  1. docker compose -f ./kafka-docker-compose.yml up -d
复制代码
  1. docker compose -f ./kafka-manager-docker-compose.yml up -d
复制代码
5. 参考链接
docker 摆设 kafka集群 【mac】_mac docker kafka-CSDN博客 
https://www.cnblogs.com/jay763190097/p/10292227.html
Centos 容器启动 rsyslog 服务

1. 参考链接
https://zhuanlan.zhihu.com/p/606856175?utm_id=0 
Rsyslog 转发日志至 Kafka 

1. 参考链接
最佳实践:Rsyslog转发日志至kafka 
日志网络之rsyslog to kafka_rsyslog template kafka-CSDN博客 
rsyslog配置详解: https://www.cnblogs.com/jiyanfeng/p/17606513.html 
2. 安装 rsyslog && rsyslog-kafka
  1. yum install rsyslog
  2. yum install rsyslog-kafka
复制代码
安装完成后,查察 /lib64/rysylog/ 中是否存在 omkafka.so,验证 rsyslog-kafka 是否安装成功。
3. rsyslog 配置
编辑配置文件(路径 `/etc/rsyslog.conf`  ),在配置项 `#### MODULES ####` 的下面添加如下配置(大概在 `/etc/rsyslogd/` 目次下添加 `XXX.conf` 配置文件) 
  1. # 加载 omkafka 和 imfile 模块
  2. module(load="omkafka")
  3. module(load="imfile")
  4.  
  5. # nginx template
  6. template(name="nginxAccessTemplate" type="string" string="%hostname%<-+>%syslogtag%<-+>%msg%\n")
  7.  
  8. # ruleset
  9. ruleset(name="nginx-kafka") {
  10.     # 日志转发 kafka
  11.     action (
  12.         type="omkafka"
  13.             template="nginxAccessTemplate"
  14.         topic="fee-test"
  15.         broker="localhost:9092"
  16.     )
  17. }
  18.  
  19. # 定义消息来源及设置相关的 action
  20. input(type="imfile" Tag="nginx-accesslog" File="/var/log/nginx/access.log" Ruleset="nginx-kafka")
复制代码
配置简单分析:
* `localhost:9092` 需要修改为你自己的kafka地址(如果为集群多个地址逗号分隔)
* `/var/log/nginx/access.log` 是监控的nginx日志文件
* `topic: fee-test`后续通过 `kafka-manager` 创建
修改完配置后运行: `rsyslogd -N 1` 查察配置是否报错;`rsyslogd -dn` debug 模式运行。
然后重启 `rsyslog`:`service rsyslog restart` `systemctl restart rsyslog` 。重启后查察 `/var/log/message` 中日志是否报错。
4. kafka 报错:InvalidReceiveException: Invalid receive (size = 1195725856 larger than 104857600)
将 $KAFKA_HOME/config/server.properties 文件中的 socket.request.max.bytes 值重置为超过数据包大小,然后重新启动 kafka 服务器。将 socket.request.max.bytes 翻倍。
5. Kafka 配置文件位置
Kafka 配置文件 server.properties 的位置取决于Kafka安装的路径。通常环境下,当你从Apache 官方网站下载 Kafka 或通过工具如 wget 或 curl 命令行工具下载时,配置文件会被放置在 Kafka 安装目次的 config 子目次下。
例如,如果你的 Kafka 安装在 /opt/kafka 目次,那么配置文件 server.properties 的完整路径就是 /opt/kafka/config/server.properties。
如果你是通过某种包管理器(如 apt 或 yum)安装的 Kafka,配置文件的位置可能会有所差别,但通常也会在 /etc/kafka 或 /etc/kafka/conf 目次下。
要修改 Kafka 配置,你需要编辑 server.properties 文件,并根据你的需求举行相应的设置。例如,你可以修改 log.dirs 来指定日志文件存放的目次,大概修改 listeners 来指定Kafka 监听的地址和端口。
node-rdkafka@2.18.0 使用文档 

1. 参考链接
node-rdkafka - npm 
2. npm install node-rdkafka 时 node-gyp rebuild 卡住解决办法 
node-gyp 需要 Python2.7 环境。
可以使用 npm install --loglevel verbose 查察安装时间的详细日志。
node-rdkafka install 时需要构建,通常会卡住。因为构建需要 node 源码来提供头文件,毗连外网下载很慢。so 建议自己下载后放置在 /Users/xxx/Library/Caches/node-gyp/10.23.3 中。
node 区分 arm64 x86 x64 等版本。留意和宿主机的兼容。 
  1. ├── include  
  2. │       └── node  
  3. └── installVersion
复制代码
  1. cat installVersion   
  2. 9
复制代码
 npm install时node-gyp rebuild 卡住解决办法 - 杜神的技能博客 - ITeye博客 
https://www.cnblogs.com/mliudong/p/4528539.html 
Librdkafka@2.3.0 国内仓库

librdkafka: librdkafka 是 Apache Kafka 的 C/C++ 开辟包,提供生产者、消费者和管理客户端 - Gitee.com 
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

羊蹓狼

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表