ELK+kafka+logback日志采集

ELK+kafka+logback日志采集


概述

       传统查看日志的方式一般是tail+grep或者把日志下载下来再搜索。这样的做法可以应付不多的主机和应用不多的部署场景,但对于多机多应用部署就不合适了。这里的多机多应用指的是同一种应用被部署到几台服务器上,每台服务器上又部署着不同的多个应用。可以想象,这种场景下,为了监控或者搜索某段日志,需要登陆多台服务器,执行多个tail -f和grep命令。一方面这很被动。另一方面,效率非常低,数次操作下来,程序员的心情也会变糟。

方案

传统elk解决方案虽然能解决大部分问题,但在实际运用中还是存在一些问题:
1. 每台机器都要部署一个logstash应用,logstash本身占用资源还是蛮多的。
2. 每部署一套新的应用,都要修改logstash的配置文件,从而去采集新的日志文件。
3. 日志的流量大小不可控,高峰期可能会冲击到下游的elasticSearch服务,导致整套elk瘫痪。
这里写图片描述
针对这些问题,加入了kafka和logback集成
1. 应用程序使用logback异步发送日志到外部,避免每台机器都要安装logstash的弊端。
2. 每部署一套应用程序不用再去修改logstash配置文件。
3. kafka承担了缓冲的角色,避免高峰期应用对于elk的冲击。

环境

  1. jkd8
  2. elasticsearch-5.4.0
  3. logstash-5.4.0
  4. kibana-5.4.0
  5. zookeeper-3.4.9
  6. kafka_2.12-0.10.2.1

elk最新版资源下载https://www.elastic.co/downloads
zookeeper最新版本资源下载http://www.apache.org/dyn/closer.cgi/zookeeper
kafka最新版本资源下载http://kafka.apache.org/downloads

部署

1、 jdk8
略······

2、 elasticsearch(非root用户)

tar zxvf elasticsearch-5.4.0.tar.gz     #解压  
cd elasticsearch-5.4.0      #进入安装目录  
vi config/elasticsearch.yml #修改配置文件  
    network.host: ip    #服务器地址  
    bootstrap.system_call_filter: false  
bin/elasticsearch -d    #后台方式启动项目  
curl -X GET http://ip:9200  #检查是否启动成功
tail -500f logs/elasticsearch.log   #启动失败,查看日志

可能会碰到的问题
报错max number of threads [1024] for user [lishang] likely too low, increase to at least [2048]

vi /etc/security/limits.d/90-nproc.conf 
    *          soft    nproc     1024
    *          soft    nproc     2048

报错max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]

vi /etc/sysctl.conf
    vm.max_map_count=262144

报错max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]

vi /etc/security/limits.conf
    * soft nofile 65536
    * hard nofile 65536

3、 zookeeper

tar zxvf zookeeper-3.4.9.tar.gz #解压
cd zookeeper-3.4.9
mkdir data logs
vi config/zoo.cfg   #修改配置文件
    dataDir=/home/admin/zookeeper/zookeeper-3.4.9/data    
    dataLogDir=/home/admin/zookeeper/zookeeper-3.4.9/logs 
bin/zkServer.sh start   #启动zookeeper
jps -m | grep zookeeper #检查zk是否启动

4、 kafka

tar zxvf kafka_2.12-0.10.2.1.tgz    #解压
cd kafka_2.12-0.10.2.1
vi config/server.properties     #修改配置文件
    delete.topic.enable=true    #topic是否可删除
    advertised.listeners=PLAINTEXT://ip:9092
    log.dirs=/home/hc/kafka/kafka_2.12-0.10.2.1/log
    zookeeper.connect=ip:2181   #kafka启动需要zk
    log.retention.hours=4   #消息存活时间
nohup bin/kafka-server-start.sh config/server.properties &  #启动  

bin/kafka-topics.sh --create --zookeeper ip:2181 --replication-factor 1 --partitions 1 --topic topic-test   #创建topic 
bin/kafka-topics.sh --list --zookeeper ip:2181      #查看topic
bin/kafka-topics.sh --delete --zookeeper ip:2181 --topic topic-test #删除topic
bin/kafka-console-producer.sh --broker-list ip:9092 --topic topic-test  #发送消息
bin/kafka-console-consumer.sh --zookeeper ip:2181 --from-beginning --topic topic-test       #接收消息

如果发送接收成功,说明kafka正常启动了
注:最好不要使用9092之外的端口,logstash监听不到

5、 logstash

tar zxvf logstash-5.4.0.tar.gz      #解压
cd logstash-5.4.0
vi config/logstash_conf.conf        #新增配置文件
    input {
        kafka {
            topics => ["topic-test"]
            bootstrap_servers => "ip:9092"
            type => "topic-test"
            consumer_threads => 5
            decorate_events => true
        }
    }
    filter {
        grok {
            match => {"message" => "%{WORD:level} %{GREEDYDATA:message}"}
            overwrite => [ "message" ]
        }
    }
    output {  
        elasticsearch {  
            hosts => "ip"
            action => "index"
            index => "%{type}-%{+YYYYMMdd}"
        } 
    }
nohup bin/logstash -f config/logstash_config.conf & #启动项目,加入—debug参数可以看到更多细节

6、 kibana

tar zxvf kibana-5.4.0-linux-x86_64.tar.gz       #解压
cd kibana-5.4.0-linux-x86_64    #修改配置文件
vi config/kibana.yml
    server.host:"ip"
    elasticsearch.url:"http://ip:9200"
vi /optimize/bundles/kibana.bundle.js       #修改样式,堆栈太多会显示不下
    truncateMaxHeight = maxHeight+"px !important" 改成 truncateMaxHeight = "none"
nohup bin/kibana &  #启动项目
http://ip:5601      #登录地址
management->add index(支持通配符topic-test*)->discover

kibaba高级搜索(es语法)http://blog.csdn.net/hu948162999/article/details/51258257

7、 结束
至此整个环境搭建完毕

应用接入logback

应用jdk版本为1.7或1.8
参考https://github.com/danielwegener/logback-kafka-appender

Elasticsearch索引定期清理

es索引会不断变大,影响搜索效率,所以要定时清除

curl '192.168.111.129:9200/_cat/indices?v'  #查询所有索引
curl -XDELETE "192.168.111.129:9200/face-web*"  #删除指定索引

创建定时任务

crontab -e
    * 23 * * * /home/hc/cron/elasticsearch_index_delete_cron.sh ip:9200

vi elasticsearch_index_delete_cron.sh
    #! /bin/sh
    rm -rf delete.tmp
    today=`date +%Y%m%d` 
    yesterday=`date -d -1day +%Y%m%d`
    curl $1'/_cat/indices?v' | awk '{print $3}' | grep '[0-9]\{8\}' | grep -v 
    $today'\|'$yesterday >> delete.tmp
    for line in `cat delete.tmp`
    do
        curl -XDELETE $1'/'$line
    done
    rm -rf delete.tmp

预告

kafka和elasticsearch集群部署

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值