前段时间,我们团队使用的kafka集群压力比较大,需要接入监控,而运维给搭建kafka集群的时候没有开启JMX监控,于是我调用了3种开启方式,并本地进行了开启验证,方便后续接入kafka eagle监控平台。

一、开启JMX的方式

方式1:修改bin/kafka-run-class.sh脚本,在开始运行的最上方加入JMX_PORT=9999(可以自行指定一个没有占用的端口)。

# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#open jmx monitor
JMX_PORT=9999

if [ $# -lt 1 ];

方式2:修改bin/kafka-server-start.sh脚本,在开始运行的最上方加入如下代码:

if [ "x$JMX_PORT" = "x"]; then
export JMX_PORT="9999"
fi

方式3:在运行启动命令前 加上系统预留的JMX_PORT.

JMX_PORT=9999 bin/kafka-server-start.sh -daemon config/server.properties

我们采用了方式2,先用命令停止服务。修改启动脚本后,重新启动kafka服务,然后进行验证。

二、验证JMX是否开启的方式

Kafka的每个监控指标都是以JMX MBEAN的形式定义的,MBEAN是一个被管理的资源实例。
我们可以使用Jconsole (Java Monitoring and Management Console),一种基于JMX的可视化监视、管理工具。

方式1:通过jmx的9999端口访问观察MBean及metric数据

  • 1.1 启动jconsole。
  • 1.2 在远程连接输入service:jmx:rmi:///jndi/rmi://127.0.0.1:9999/jmxrmi 或者 127.0.0.1:9999(127.0.0.1 可以换成kafka服务器所在的ip),然后点击连接,可以查看Kafka的各种监控指标,都是以 kafka.xxx:type=xxx,xxx=xxx 打头MBean。

    方式2:使用Kafka默认提供的一个工具JmxTool,用于实时查看JMX监控指标。

  • 2.1 打开终端进入到Kafka安装目录下,输入命令bin/kafka-run-class.sh kafka.tools.JmxTool便可以得到JmxTool工具的帮助信息。比如我们要监控入站速率,可以输入以下命令,BytesInPerSec的值每5秒会打印在控制台上。
    bin/kafka-run-class.sh kafka.tools.JmxTool --object-name kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec --jmx-url service:jmx:rmi:///jndi/rmi://ip:9999/jmxrmi --date-format "YYYY-MM-dd HH:mm:ss" --attributes FifteenMinuteRate --reporting-interval 5000