filebeat + kafka + elk 日志收集方案实践

filebeat + kafka + elk 日志收集方案实践

[TOC]

0.使用的插件的版本

elasticsearch-5.6.11
filebeat-6.4.2
kafka_2.12-1.1.1
kibana-5.6.11
logstash-6.4.2
zookeeper-3.4.10

注意:

服务器均已安装 JDK1.8 版本

这里的es版本要和kibana的版本要对应

filebeat 对 kafka 的版本有需求,版本不对应将导致日志无法正确收集

es 和logstash 不要安装到同一个服务器 两个都为内存大户

1f63f9ec71153e04d13d64a29c46cc3e

1.安装elasticsearch

下载对应版本的安装包

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.11.tar.gz

tar -xvf elasticsearch-5.6.11.tar.gz

进入当前目录,启动Elasticsearch:

cd elasticsearch-5.6.11/bin
./elasticsearch

如果是用root账号启动,会报以下错误:

Exception in thread "main" java.lang.RuntimeException: don't run elasticsearch as root. 
at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:93) 
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:144) 
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:285) 
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35) 
Refer to the log for complete error details.

这个意思也很明显,Elasticsearch出于安全方面的考虑, 不允许用户使用root账号启动Elasticsearch。我们得新建一个用户,专门用于启动Elasticsearch。

创建一个用户组elsearch与用户组中的用户elsearch:

groupadd elsearch
useradd elsearch -g elsearch

修改用户elsearch的密码:

passwd elsearch

修改目录拥有者,赋予相应的权限:

chown -R elsearch:elsearch elasticsearch-6.2.4

切换到用户elsearch,或者使用elsearch登陆,启动Elasticsearch:

su elsearch cd elasticsearch-6.2.4/bin
./elasticsearch

如果你想让你的ElasticSearch在后端启动:

./bin/elasticsearch -d 

查看Elasticsearch是否安装成功,如果有返回值说明安装成功:

curl http://127.0.0.1:9200

2.安装filebeat

日志收集插件

下载对应版本的安装包

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.4.2-linux-x86_64.tar.gz

tar -zxvf filebeat-6.4.2-linux-x86_64.tar.gz

进入当前目录,编辑配置文件 filebeat.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /root/logs/xiezhu/*/*.log # 文件夹包含子目录遍历
  fields:
    log_topics: log
  multiline: # 多行代码合并
        pattern: '^\['
        negate:  true
        match:   after
output.kafka: # 输出方式,输出到kafka
  enabled: true
  hosts: ["192.168.1.182:9092"]
  topic: '%{[fields][log_topics]}' # 输出的topic
#这里配置下name 在对应日志中可显示出来
name: 192.168.1.126-Ares-server

启动filebeat

nohup ./filebeat &

查看输出日志

tail -f logs/filebeat

c5ded2b5df73dfd13f64c446756b31b6

3.安装kafka

下载对应版本的安装包

wget http://mirrors.shu.edu.cn/apache/kafka/1.1.1/kafka_2.12-1.1.1.tgz

tar -zxvf kafka_2.12-1.1.1.tgz

进入当前目录,编辑配置文件 config/server.properties

broker.id=0
listeners=PLAINTEXT://192.168.1.182:9092 # 网络监听端口
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/opt/soft/kafka/kafka-logs # 日志输出路径
num.partitions=1
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=192.168.1.160:2181 # zk地址
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0

启动kafka

nohup ./bin/kafka-server-start.sh config/server.properties &

验证安装

1、创建topic
bin/kafka-topics.sh --create --zookeeper 192.168.1.160:2181 --replication-factor 1 --partitions 1 --topic test

2、查看创建的topic

bin/kafka-topics.sh -list -zookeeper 192.168.1.160:2181
test

3、生产消息测试

bin/kafka-console-producer.sh --broker-list 192.168.1.182:9092 --topic test 
this is test          #输入后回车

4、消费消息测试

bin/kafka-console-consumer.sh --bootstrap-server 192.168.1.182:9092 --topic test --from-beginning
this is test

4.安装zookeeper

下载对应版本的安装包

wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz

tar -zxvf zookeeper-3.4.10.tar.gz

进入当前目录,编辑配置文件conf/zoo.cfg

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/opt/soft/zookeeper/zookeeper-3.4.10/data
# the port at which the clients will connect
clientPort=2181

启动zookeeper

./bin/zkServer start

5.安装logstash

下载对应版本的安装包

wget https://artifacts.elastic.co/downloads/logstash/logstash-6.4.2.tar.gz

tar -zxvf logstash-6.4.2.tar.gz

进入当前目录,编辑配置文件config/logstash.conf

input {
    kafka {
        bootstrap_servers => "192.168.1.182:9092"
        topics => ["log"]
        codec => json {
            charset => "UTF-8"
        }
    }
    # 如果有其他数据源,直接在下面追加
}

filter {
    # 将message转为json格式
    if [type] == "log" {
        json {
            source => "message"
            target => "message"
        }
    }
}

output {
    # 处理后的日志入es
    elasticsearch {
        hosts => "192.168.1.181:9200"
        index => "logstash-%{+YYYY.MM.dd-HH:mm:ss.SSS}"
  }
}

启动logstash

nohup ./bin/logstash -f config/logstash.conf &

6.安装kibana

下载对应版本的安装包

wget https://artifacts.elastic.co/downloads/kibana/kibana-5.6.11-linux-x86_64.tar.gz

tar -zxvf kibana-5.6.11-linux-x86_64.tar.gz

进入当前目录 修改相关配置config/kibana.yml

server.port: 5601
server.host: "localhost"
server.name: "MM-LOG"
elasticsearch.url: "http://192.168.1.181:9200" # es的地址
kibana.index: ".kibana"

启动/停止命令

# 启动
./kibana
# 停止
fuser -n tcp 5601 # 查看端口进程
kill -9  端口 # 杀死上步执行结果进程

所有流程执行成功结果

aabb23cdd71b56ace17242b635d04210

7.kibana 优化

7.1 添加登录验证

# 1.安装nginx
sudo apt-get install nginx
# 2.安装Apache密码生产工具
sudo apt-get install apache2-utils
# 3.生成密码文件
mkdir -p /etc/nginx/passwd
htpasswd -c -b /etc/nginx/passwd/kibana.passwd 用户名 密码
# 4.配置nginx
#/etc/nginx/conf.d/default
server {
        listen 192.168.1.182:5601;

        auth_basic "Kibana Auth";
        auth_basic_user_file /etc/nginx/passwd/kibana.passwd;

        location / {
                proxy_pass http://127.0.0.1:5601;
                proxy_redirect off;
        }
}

# 5.重启kafka
# 6.重启nginx

7.2 汉化

英文好的请自行忽略

https://github.com/anbai-inc/Kibana_Hanization

需要python运行环境

python main.py Kibana目录

8.日志总体架构图

日志搜集分析 对系统无侵入,可扩展

45cdbc854d48c45d36b85696ba06ea98
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,383评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,522评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,852评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,621评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,741评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,929评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,076评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,803评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,265评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,582评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,716评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,395评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,039评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,027评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,488评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,612评论 2 350

推荐阅读更多精彩内容