马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
一、准备工作
1.1、服务器信息梳理
脚色IP操纵系统安装服务监控 机10.45.19.20Linux CentOS 7.9CMAK3.0.0.5、ZooKeeper3.9.0、JDK11、JDK1.8被监控 机 Kafka broker.id 050.50.50.101Linux CentOS 7.9Kafka、ZooKeeper(任意版本)被监控 机 Kafka broker.id 150.50.50.101Linux CentOS 7.9Kafka、ZooKeeper(任意版本)被监控机 Kafka broker.id 250.50.50.101Linux CentOS 7.9Kafka、ZooKeeper(任意版本) 1.2、准备以下安装包
- https://www.oracle.com/java/technologies/downloads/archive
复制代码- https://archive.apache.org/dist/zookeeper
复制代码- https://github.com/yahoo/CMAK
复制代码- jdk-11.0.26_linux-x64_bin.tar.gz
- jdk-8u161-linux-x64.tar.gz
- apache-zookeeper-3.9.0-bin.tar.gz
- cmak-3.0.0.5.zip
复制代码 1.3、创建安装目录
二、部署 JDK11 环境
- jdk-11.0.26_linux-x64_bin.tar.gz
复制代码- tar zxf jdk-11.0.26_linux-x64_bin.tar.gz
- -C /usr/local/cmak
复制代码 三、部署 ZooKeeper 存储元数据
3.1、部署 JDK1.8 环境
- tar zxf jdk-8u161-linux-x64.tar.gz -C /usr/local/cmak
复制代码- export PATH=$PATH:/usr/local/cmak/jdk1.8.0_161/bin
复制代码 3.2、部署 ZooKeeper
3.2.1、解压至安装目录
- wget https://archive.apache.org/dist/zookeeper
- /zookeeper-3.9.0/apache-zookeeper-3.9.0-bin.tar.gz
复制代码- tar zxf apache-zookeeper-3.9.0-bin.tar.gz -C /usr/local/cmak
复制代码- mv /usr/local/cmak/apache-zookeeper-3.9.0-bin /usr/local/cmak/zookeeper-3.9.0
复制代码 3.2.2、创建存储目录
- mkdir /usr/local/cmak
- /zookeeper-3.9.0/{data,logs}
复制代码 3.2.3、编辑设置文件
- cp /usr/local/cmak/zookeeper-3.9.0/conf/zoo_sample.cfg /usr/local/cmak/zookeeper-3.9.0/conf/zoo.cfg
复制代码- vim /usr/local/cmak/zookeeper-3.9.0/conf/zoo.cfg
复制代码- dataDir=/usr/local/cmak/zookeeper-3.9.0/data
- dataLogDir=/usr/local/cmak/zookeeper-3.9.0/logs
- clientPort=3281
- admin.serverPort=3282
- tickTime=2000
- initLimit=10
- syncLimit=5
复制代码 3.2.4、启动
- sh /usr/local/cmak/zookeeper-3.9.0/bin/zkServer.sh start
复制代码 四、部署 CMAK 监控
4.1、解压至安装目录
- https://github.com/yahoo/CMAK
- /releases/download/3.0.0.5/cmak-3.0.0.5.zip
复制代码- unzip cmak-3.0.0.6.zip -d /usr/local/cmak
复制代码 4.2、编写设置文件
- vim /usr/local/cmak/cmak-3.0.0.6/conf/application.conf
复制代码- vim /usr/local/cmak/cmak-3.0.0.6/conf/logback.xml
复制代码- <!-- 修改后的配置(重点关注 encoder 部分的 regex 过滤) -->
- <configuration>
- <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
- <file>${application.home}/logs/application.log</file>
- <encoder>
- <!-- 添加敏感信息过滤 -->
- <pattern>%date - [%level] - from %logger in %thread %n%replace(%message){'SASL JAAS config=.*', 'SASL JAAS config=******'}%n%xException%n</pattern>
- </encoder>
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <fileNamePattern>${application.home}/logs/application.%d{yyyy-MM-dd}.log</fileNamePattern>
- <maxHistory>5</maxHistory>
- <totalSizeCap>5GB</totalSizeCap>
- </rollingPolicy>
- </appender>
- <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <encoder>
- <!-- 添加敏感信息过滤 -->
- <pattern>%date - [%level] %logger{15} - %replace(%message){'SASL JAAS config=.*', 'SASL JAAS config=******'}%n%xException{10}</pattern>
- </encoder>
- </appender>
- <!-- 其他部分保持不变 -->
- <appender name="ASYNCFILE" class="ch.qos.logback.classic.AsyncAppender">
- <appender-ref ref="FILE" />
- </appender>
- <appender name="ASYNCSTDOUT" class="ch.qos.logback.classic.AsyncAppender">
- <appender-ref ref="STDOUT" />
- </appender>
- <logger name="play" level="INFO" />
- <logger name="application" level="INFO" />
- <logger name="kafka.manager" level="INFO" />
- <!-- Off these ones as they are annoying, and anyway we manage configuration ourself -->
- <logger name="com.avaje.ebean.config.PropertyMapLoader" level="OFF" />
- <logger name="com.avaje.ebeaninternal.server.core.XmlConfigLoader" level="OFF" />
- <logger name="com.avaje.ebeaninternal.server.lib.BackgroundThread" level="OFF" />
- <logger name="com.gargoylesoftware.htmlunit.javascript" level="OFF" />
- <logger name="org.apache.zookeeper" level="INFO"/>
- <root level="WARN">
- <appender-ref ref="ASYNCFILE" />
- <appender-ref ref="ASYNCSTDOUT" />
- </root>
- </configuration>
复制代码 4.3、编写启停脚本
- vim /usr/local/cmak/cmak-3.0.0.6/start.sh
复制代码- #!/bin/bash
- JDK11_PATH="/usr/local/cmak/jdk-11.0.26"
- CMAK_PATH="/usr/local/cmak/cmak-3.0.0.6"
- CMAK_PORT="3283"
- $CMAK_PATH/bin/cmak \
- -Dconfig.file=$CMAK_PATH/conf/application.conf \
- -java-home $JDK11_PATH \
- -Dhttp.port=$CMAK_PORT > /dev/null &
复制代码- vim /usr/local/cmak/cmak-3.0.0.6/stop.sh
复制代码- #!/bin/bash
- CMAK_PATH="/usr/local/cmak/cmak-3.0.0.6"
- ps aux | grep 'java' | grep 'cmak-3.0.0.6' | awk '{print $2}' | xargs -r kill -9
- [[ -f "$CMAK_PATH/RUNNING_PID" ]] && rm -f $CMAK_PATH/RUNNING_PID
复制代码- chmod +x /usr/local/cmak/cmak-3.0.0.6/{start.sh,stop.sh}
复制代码 4.4、启动
- sh /usr/local/cmak/cmak-3.0.0.6/start.sh
复制代码 五、添加集群监控
- 10.73.251.66:2261,10.73.251.67:2261,10.73.251.68:2261
复制代码
- org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="2332***JA";
复制代码 六、Kafka 启用 JMX
6.1、添加认证文件
- vim /usr/local/kafka_2.13-2.8.2/config/jmxremote.access
复制代码- monitorRole readonly
- controlRole readwrite
复制代码- vim /usr/local/kafka_2.13-2.8.2/config/jmxremote.password
复制代码- monitorRole password123
- controlRole password456
复制代码- chmod 600 /usr/local/kafka_2.13-2.8.2/config/jmxremote.password
复制代码 6.2、设置文件解释
6.2.1、jmxremote.access 文件
jmxremote.access 文件定义了哪些脚色可以访问 JMX,及其访问级别。
每个脚色对应差别的权限。
通过此文件,可以设置差别的脚色及其对 JMX 毗连的权限。
格式:
- role:脚色名称(如 monitorRole,controlRole)。
- permission:该脚色的权限,可以是以下值之一:
- readonly:只读权限,允许查看监控数据,但不能进行任何操纵。
- readwrite:读写权限,允许查看监控数据并实验管理操纵。
示例:
- monitorRole readonly
- controlRole readwrite
复制代码 上面的示例表现:
- monitorRole 脚色具有只读权限,用户可以毗连 JMX 进行监控,但不能进行修改或控制。
- controlRole 脚色具有读写权限,用户不仅可以进行监控,还可以修改或控制应用程序的行为(例如重启服务等)。
6.2.2、jmxremote.password 文件
jmxremote.password 文件存储了每个脚色的密码。
这个文件与 jmxremote.access 文件配合利用,确保只有具有正确密码的用户才能毗连到 JMX 服务。
格式:
- role:与 jmxremote.access 文件中脚色匹配。
- password:该脚色对应的密码。
示例:
- monitorRole password123
- controlRole password456
复制代码 上面的示例表现:
- monitorRole 脚色的密码是 password123。
- controlRole 脚色的密码是 password456。
6.2.3、设置与权限的关系
这两个文件的配合使得 JMX 访问可以进行基于脚色的控制和认证:
jmxremote.access 文件用于定义权限:哪些脚色能做什么操纵。
jmxremote.password 文件用于定义认证:哪些脚色有权访问,并提供密码来验证身份。
6.3、修改启动脚本
- vim /usr/local/kafka_2.13-2.8.2/kafka_start.sh
复制代码- #!/bin/bash
- kafka_path="/usr/local/kafka_2.13-2.8.2"
- export KAFKA_OPTS=" -Djava.security.auth.login.config=$kafka_path/config/kafka_server_jaas.conf "
- $kafka_path/bin/kafka-server-start.sh $kafka_path/config/server.properties > $kafka_path/kafka_nohup.out &
复制代码 改为:
- 留意!!!留意!!!环境变量中参数前后的空格是必须的!!!
- #!/bin/bash
- kafka_path="/usr/local/kafka_2.13-2.8.2"
- # 设置 JMX 端口和认证
- export JMX_PORT=9999
- export KAFKA_JMX_OPTS=" -Dcom.sun.management.jmxremote \
- -Dcom.sun.management.jmxremote.port=$JMX_PORT \
- -Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT \
- -Dcom.sun.management.jmxremote.authenticate=true \
- -Dcom.sun.management.jmxremote.ssl=false \
- -Djava.rmi.server.hostname=127.0.0.1 \
- -Dcom.sun.management.jmxremote.access.file=$kafka_path/config/jmxremote.access \
- -Dcom.sun.management.jmxremote.password.file=$kafka_path/config/jmxremote.password "
- export KAFKA_OPTS=" $KAFKA_JMX_OPTS -Djava.security.auth.login.config=$kafka_path/config/kafka_server_jaas.conf "
- # 启动 Kafka 并将日志重定向
- $kafka_path/bin/kafka-server-start.sh $kafka_path/config/server.properties >> $kafka_path/kafka_nohup.out &
复制代码 6.4、重启 Kafka
- netstat -lntpu | grep java | grep 9002 | awk -F '[ /]+' '{print $7}' | xargs -r kill -9
复制代码- netstat -lntpu | grep java | grep 9999
复制代码 七、集群监控启用 JMX
|