背景:我想实现客户端发送log日志到nginx,然后由nginx插件ngx_kafka_module采集日志到kafka。这样就不用单独写日志采集接口往kafka push日志了。

软件:

 nginx-1.17.9
 kafka_2.11-2.1.0
 librdkafka(kafka的C语言库)
 ngx_kafka_module(nginx的kafka插件) 

1.nginx安装

进入nginx-1.17.9目录

 ./configure
 make & make install 

nginx默认安装到了/usr/local/nginx目录

2.librdkafka安装

 git clone https://github.com/edenhill/librdkafka
 yum install -y gcc gcc-c++ pcre-devel zlib-devel
 ./configure
 make && make install 

3.ngx_kafka_module插件安装

编译nginx,然后将插件同时编译

进入nginx-1.17.9目录

 git clone https://github.com/brg-liuwei/ngx_kafka_module
 ./configure --add-module=/app/nginx-1.17.9/ngx_kafka_module/
 make
 make install 

4.启动kafka

配置文件略,进入/app/kafka_2.11-2.1.0目录

 启动zk
 bin/zookeeper-server-start.sh config/zookeeper.properties
 启动kafka
 bin/kafka-server-start.sh config/server.properties
 创建topic为nginx_log
 bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic nginx_log
 查看topic列表
 bin/kafka-topics.sh --list --zookeeper localhost:2181
 启动消费者
 bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic nginx_log --from-beginning 

5.nginx插件kafka配置

 http {
     include       mime.types;
     default_type  application/octet-stream;
  
     #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
     #                  '$status $body_bytes_sent "$http_referer" '
     #                  '"$http_user_agent" "$http_x_forwarded_for"';
     #access_log  logs/access.log  main;
     sendfile        on;
     #tcp_nopush     on;
     #keepalive_timeout  0;
     keepalive_timeout  65;
     #gzip  on;
     # kafka broker配置
     kafka;
     kafka_broker_list node1:9092 node2:9092;         
     
     server {
         listen       80;
         server_name  localhost;
         #charset koi8-r;
         #access_log  logs/host.access.log  main;
  
       location = /log/user{
           kafka_topic nginx_log; #配置topic名称
       }
     }
 } 

6.测试

curl http://localhost/log/user -d “message send to kafka topic”

观察kafka消费者已经接收到消息了…

日志采集实现了,之后可以用flume工具消费kafka数据写入hdfs中。

发表评论

电子邮件地址不会被公开。 必填项已用*标注