名称 
 
 
 
 
  优势 
 
 
 
 
  劣势 
 
 
 
 
  常⽤ 
 
 
 
 
  Logstash 
 
 
 
 
  插件多,资料充⾜,配置简单 
 
 
 
 
  性能⼀般,不⽀持缓存 
 
 
 
 
  采集,传 
 
 
 
 
  输 
 
 
 
 
  Filebeat 
 
 
 
 
  可靠,性能好,多种对接 
 
 
 
 
  存在注册表过⼤问题 
 
 
 
 
  采集 
 
 
 
 
  Fluentd 
 
 
 
 
  基于Ruby,插件多,易于编写和 
 
 
 
 
  维护 
 
 
 
 
  灵活性相对差,性能⼀般 
 
 
 
 
  采集 
 
 
 
 
  Logtail 
 
 
 
 
  资源占⽤少 
 
 
 
 
  尽做收集,类型解析较弱 
 
 
 
 
  采集 
 
 
 
 
  Logagent 
 
 
 
 
  轻量快速,⽀持缓存 
 
 
 
 
  灵活性差 
 
 
 
 
  采集,传 
 
 
 
 
  输 
 
 
 
 
  rsyslog 
 
 
 
 
  速度快,轻量化,规则灵活 
 
 
 
 
  配置繁杂,⽂档差,版本 
 
 
 
 
  差异 
 
 
 
 
  采集 
 
 
 
 
  Syslog-ng 
 
 
 
 
  性能好,⽂档相对⻬全 
 
 
 
 
  开源版本功能有限 
 
 
 
 
  采集 
 
 
 
 
  Kafka 
 
 
 
 
  可靠,稳定,⾼性能 
 
 
 
 
  容易重复消费 
 
 
 
 
  传输 
 
 
 
 
  Flume 
 
 
 
 
  可靠,容错性⾼,易管理,实时 
 
 
 
 
  配置繁琐 
 
 
 
 
  传输 
 
 
 
 
  ElasticSearch 
 
 
 
 
  分布式部署,⾃动故障转移 
 
 
 
 
  个⼈开发,还不够⾃动 
 
 
 
 
  存储 
 
 
 
 
  HDFS 
 
 
 
 
  ⾼容错,⼤数据存储 
 
 
 
 
  延迟⾼,不适于⼩⽂件 
 
 
 
 
  存储 
 
 
 
 
  kibana 
 
 
 
 
  多种图标配置简单 
 
 
 
 
  仅⽀持es 
 
 
 
 
  展示,分 
 
 
 
 
  析 
 
 
 
 
  grafana 
 
 
 
 
  多数据源⽀持,⾃带警报 
 
 
 
 
  偏监控⽅向 
 
 
 
 
  分析,预 
 
 
 
 
  警 
 
 
 
 
  2、中间件 
 
 
 
 
  2.1 概述 
 
 
 
 
  ⽇志的⽣命周期⼀般分为采集,传输,存储和分析四个环节,每个步骤有可⽤的中间件和⼯具。 
 
 
 
 
  选⽤中间件时所关注的⻆度:性能、可靠性、插件⽀持程度、配置复杂度 
 
 
 
 
  2.1.1 汇总 
 
 
 
 
  2.1.2 总结 
 
 
 
 
  企业实际实战中,elk是成熟且⼴泛使⽤的⽅案。 
 
 
 
 
  logstash因为性能弱于fifilebeat,并不直接运⽤于采集起点,⼀般使⽤fifilebeat。 
 
 
 
 
  进⼊elk前,经验性⻆度,放置kafka,⼀⽅⾯作为队列和缓冲,另⼀⽅⾯提供了统⼀的⼊⼝渠道。 
 
 
 
 
  2.2 部署 
 
 
 
 
  2.2.1 ES 
 
 
 
 
  1)简介 
 
 
 
 
    Elasticsearch 是⼀个开源的搜索引擎,建⽴在⼀个全⽂搜索引擎库Lucene基础之上。 Lucene 可 
 
 
 
 
  以说是当下最先进、⾼性能、全功能的搜索引擎库,缺点是Lucene的使⽤⾮常的复杂。Elasticsearch 
 
 
 
 
  也是使⽤ Java 编写的,它的内部使⽤ Lucene 做索引与搜索,但是它的⽬的是使全⽂检索变得简单, 
 
 
 
 
  通过隐藏 Lucene 的复杂性,取⽽代之的提供⼀套简单⼀致的 RESTful API。 
 
 
 
 
  2)相关链接 
 
 
 
 
  官⽹: 
 
 
 
 
  https://www.elastic.co/cn/downloads/elasticsearch 
 
 
 
 
  下载: 
 
 
 
 
  wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.5.1-linux-x86_64.tar.gz 
 
 
 
 
  分词器: 
 
 
 
 
  https://github.com/medcl/elasticsearch-analysis-ik 
 
 
 
 
  3)部署 
 
 
 
 
  系统环境:以下课程假设测试机器ip为172.17.0.203 
 
 
 
 
  解压: 
 
 
 
 
  tar xvf elasticsearch-7.5.1-linux-x86_64.tar.gz 
 
 
 
 
    许多年前,⼀个刚结婚的名叫 
 
 
 
 
  Shay Banon 的失业开发者,跟着他的妻⼦去了伦敦,他的妻⼦在那⾥ 
 
 
 
 
  学习厨师。 为了给他的妻⼦做⼀个⻝谱搜索引擎,他开始使⽤ 
 
 
 
 
  Lucene 的⼀个早期版本。直接使⽤ 
 
 
 
 
  Lucene 是很难的,因此 
 
 
 
 
  Shay 开始做⼀个抽象层,Java 开发者使⽤它可以很简单的给他们的程序添加 
 
 
 
 
  搜索功能。 他发布了他的第⼀个开源项⽬ Compass。 
 
 
 
 
    后来 Shay 获得了⼀份⼯作,主要是⾼性能,分布式环境下的内存数据⽹格。这个对于⾼性能,实 
 
 
 
 
  时,分布式搜索引擎的需求尤为突出, 他决定重写 Compass,把它变为⼀个独⽴的服务并取名 
 
 
 
 
  Elasticsearch。 
 
 
 
 
    第⼀个公开版本在2010年2⽉发布,从此以后,Elasticsearch 已经成为了 Github 上最活跃的项 
 
 
 
 
  ⽬之⼀,他拥有超过300名 contributors(⽬前736名 contributors )。 ⼀家公司已经开始围绕 
 
 
 
 
  Elasticsearch 提供商业服务,并开发新的特性,但是,Elasticsearch 将永远开源并对所有⼈可 
 
 
 
 
  ⽤。 
 
 
 
 
    据说,Shay 的妻⼦还在等着她的⻝谱搜索引擎… 0_0! 
 
 
 
 
  修改: 
 
 
 
 
  confifig/elasticsearch.yml 
 
 
 
 
  修改⽂件描述符: 
 
 
 
 
  vim /etc/sysctl.conf 
 
 
 
 
  启动: 
 
 
 
 
  4)验证: 
 
 
 
 
  访问 http://172.17.0.203:9200 , 启动成功 
 
 
 
 
  #主机名,通过 hostname 命令查询到 
 
 
 
 
  cluster.initial_master_nodes: ["主机名"] 
 
 
 
 
  network.host: 0.0.0.0 
 
 
 
 
  http.port: 9200 
 
 
 
 
  http.cors.enabled 
 
 
 
 
  : true 
 
 
 
 
  http.cors.allow-origin: "*" 
 
 
 
 
  vm.max_map_count=64000 
 
 
 
 
  sysctl -p 
 
 
 
 
  #es不允许root⽤户启动,需要添加新⽤户身份 
 
 
 
 
  #创建elsearch⽤户组及elsearch⽤户 
 
 
 
 
  groupadd elsearch 
 
 
 
 
  useradd elsearch -g elsearch -p elasticsearch 
 
 
 
 
  #更改elasticsearch⽂件夹及内部⽂件的所属⽤户及组为elsearch:elsearch 
 
 
 
 
  chown -R elsearch:elsearch elasticsearch 
 
 
 
 
  #切换到elsearch⽤户再启动 
 
 
 
 
  su elsearch 
 
 
 
 
  #守护进程运⾏ 
 
 
 
 
  ./bin/elasticsearch -d 
 
 
 
 
  #验证启动进程 
 
 
 
 
  ps aux | grep elasticsearch 
 
 
 
 
  5)中⽂分词器安装: 
 
 
 
 
  es默认分词器对中⽂分词⾮常不友好,需要安装ik分词器 
 
 
 
 
  Analyzer: ik_smart , ik_max_word , Tokenizer: ik_smart , ik_max_word 
 
 
 
 
  6)验证分词器: 
 
 
 
 
  POST: http://172.17.0.203:9200/_analyze 
 
 
 
 
  BODY: {"text":"测试分词效果","analyzer": "ik_smart"} 
 
 
 
 
  指令:curl http://localhost:9200/_analyze -X POST -H 'Content-Type:application/json' -d 
 
 
 
 
  '{"text":"test elasticsearch 测试分词效果","analyzer": "ik_smart"}' 
 
 
 
 
  RESULT: 
 
 
 
 
  { 
 
 
 
 
  "name" : "bj-yjy-java-wsw", 
 
 
 
 
  "cluster_name" : "elasticsearch", 
 
 
 
 
  "cluster_uuid" : "LT1y6fQSRPykQv3BUdolZg", 
 
 
 
 
  "version" : { 
 
 
 
 
  "number" : "7.5.1", 
 
 
 
 
  "build_flavor" 
 
 
 
 
  : 
 
 
 
 
  "default" 
 
 
 
 
  , 
 
 
 
 
  "build_type" 
 
 
 
 
  : 
 
 
 
 
  "tar" 
 
 
 
 
  , 
 
 
 
 
  "build_hash" : "3ae9ac9a93c95bd0cdc054951cf95d88e1e18d96", 
 
 
 
 
  "build_date" 
 
 
 
 
  : "2019-12-16T22:57:37.835892Z", 
 
 
 
 
  "build_snapshot" : false, 
 
 
 
 
  "lucene_version" 
 
 
 
 
  : "8.3.0", 
 
 
 
 
  "minimum_wire_compatibility_version" 
 
 
 
 
  : "6.8.0", 
 
 
 
 
  "minimum_index_compatibility_version" : "6.0.0-beta1" 
 
 
 
 
  }, 
 
 
 
 
  "tagline" : "You Know, for Search" 
 
 
 
 
  } 
 
 
 
 
  wget -c https://github.com/medcl/elasticsearch-analysis 
 
 
 
 
  ik/releases/download/v7.5.1/elasticsearch-analysis-ik-7.5.1.zip 
 
 
 
 
  mkdir $ES_HOME/plugins/ik 
 
 
 
 
  unzip elasticsearch-analysis-ik-7.5.1.zip -d $ES_HOME/plugins/ik 
 
 
 
 
  #安装完成重启es 
 
 
 
 
  { 
 
 
 
 
  2.2.2 es-head 
 
 
 
 
  1)简介 
 
 
 
 
    我们可以⽅便的使⽤curl等客户端⼯具,通过Restful API对Elasticsearch进⾏操作,但也有⼀些客 
 
 
 
 
  户端⼯具提供对于ElasticSearch更加友好的可视化操作⽀持,elasticsearch-head就是其中很优秀的代 
 
 
 
 
  表。 
 
 
 
 
  "tokens": [ 
 
 
 
 
  { 
 
 
 
 
  "token": "test", 
 
 
 
 
  "start_offset": 0, 
 
 
 
 
  "end_offset": 4, 
 
 
 
 
  "type": "ENGLISH", 
 
 
 
 
  "position": 0 
 
 
 
 
  }, 
 
 
 
 
  { 
 
 
 
 
  "token" 
 
 
 
 
  : "elasticsearch" 
 
 
 
 
  , 
 
 
 
 
  "start_offset" 
 
 
 
 
  : 5, 
 
 
 
 
  "end_offset" 
 
 
 
 
  : 18, 
 
 
 
 
  "type" 
 
 
 
 
  : "ENGLISH" 
 
 
 
 
  , 
 
 
 
 
  "position": 1 
 
 
 
 
  }, 
 
 
 
 
  { 
 
 
 
 
  "token": "测试", 
 
 
 
 
  "start_offset": 19, 
 
 
 
 
  "end_offset": 21, 
 
 
 
 
  "type": "CN_WORD", 
 
 
 
 
  "position": 2 
 
 
 
 
  }, 
 
 
 
 
  { 
 
 
 
 
  "token": "分词", 
 
 
 
 
  "start_offset": 21, 
 
 
 
 
  "end_offset": 23, 
 
 
 
 
  "type": "CN_WORD", 
 
 
 
 
  "position": 3 
 
 
 
 
  }, 
 
 
 
 
  { 
 
 
 
 
  "token": "效果", 
 
 
 
 
  "start_offset": 23, 
 
 
 
 
  "end_offset": 25, 
 
 
 
 
  "type": "CN_WORD", 
 
 
 
 
  "position": 4 
 
 
 
 
  } 
 
 
 
 
  ] 
 
 
 
 
  } 
 
 
 
 
    早期版本的elasticsearch-head可以直接以插件的⽅式在Elasticsearch中进⾏安装,在 
 
 
 
 
  Elasticsearch 5之后则需要将elasticsearch-head服务单独运⾏,并且⽀持Chrome的插件⽅式或者 
 
 
 
 
  Docker容器运⾏⽅式。 
 
 
 
 
  2)部署 
 
 
 
 
  3)验证 
 
 
 
 
  访问9100端⼝,并连接es地址: 
 
 
 
 
  4)功能演示 
 
 
 
 
  概览:健康状态、集群信息、索引信息、分区信息 
 
 
 
 
  索引:索引概览、新建索引 
 
 
 
 
  数据浏览:索引清单、字段清单与筛选 
 
 
 
 
  数据查询:基本查询、复杂查询、查询基本语法 
 
 
 
 
  2.2.3 logstash 
 
 
 
 
  1)简介 
 
 
 
 
  Logstash诞⽣于2009年8有2⽇,其作者是世界著名的虚拟主机托管商DreamHost的运维⼯程师Jordan 
 
 
 
 
  Sissel。在2013年,被ElasticSearch公司收购,作为⽇志收集⼯具,成为elk的⼀员。 
 
 
 
 
  2)相关链接 
 
 
 
 
  项⽬主⻚: 
 
 
 
 
  #采⽤docker启动 
 
 
 
 
  #查看镜像 
 
 
 
 
  docker images | 
 
 
 
 
  grep elasticsearch-head 
 
 
 
 
  #下载镜像 
 
 
 
 
  docker pull alivv/elasticsearch-head 
 
 
 
 
  #启动 
 
 
 
 
  docker run -d --name eshead -p 9100:9100 alivv/elasticsearch-head 
 
 
 
 
  https://www.elastic.co/cn/downloads/logstash 
 
 
 
 
  下载地址: 
 
 
 
 
  wget https://artifacts.elastic.co/downloads/logstash/logstash-7.5.1.tar.gz 
 
 
 
 
  3)部署 
 
 
 
 
  解压: 
 
 
 
 
  tar xvf logstash-7.5.1.tar.gz 
 
 
 
 
  配置: 
 
 
 
 
  在conf.d⽬录下新建⼀个confifig1.conf⽂件 
 
 
 
 
  启动,允许配置⽂件⾃动刷新: 
 
 
 
 
  4)验证: 
 
 
 
 
  input { 
 
 
 
 
  file { 
 
 
 
 
  path => "/root/logs/*.log" 
 
 
 
 
  start_position => beginning 
 
 
 
 
  add_field => {"from" => "localfile"} 
 
 
 
 
  } 
 
 
 
 
  } 
 
 
 
 
  filter { 
 
 
 
 
  } 
 
 
 
 
  output { 
 
 
 
 
  elasticsearch { 
 
 
 
 
  hosts => "localhost:9200" 
 
 
 
 
  index => "mylog" 
 
 
 
 
  } 
 
 
 
 
  stdout { 
 
 
 
 
  } 
 
 
 
 
  } 
 
 
 
 
  nohup sh /opt/app/elk/logstash-7.5.1/bin/logstash -f /opt/app/elk/logstash- 
 
 
 
 
  7.5.1/conf.d/ --config.reload.automatic >> /opt/logs/logstash.log & 
 
 
 
 
  2.2.4 kibana 
 
 
 
 
  1)简介 
 
 
 
 
    Kibana是⼀个开源的分析与可视化平台,主要⽤于和 
 
 
 
 
  Elasticsearch⼀起使⽤。使⽤kibana进⾏简单 
 
 
 
 
  的配置,就可以搜索、查看存放在Elasticsearch中的数据。Kibana具有各种不同的图表、表格、地图 
 
 
 
 
  等,借助这些直观的视图,可以达到⾼级的数据分析与可视化的⽬的。 
 
 
 
 
  2)相关链接 
 
 
 
 
  https://www.elastic.co/cn/downloads/kibana 
 
 
 
 
  https://artifacts.elastic.co/downloads/kibana/kibana-7.5.1-linux-x86_64.tar.gz 
 
 
 
 
  3)安装部署 
 
 
 
 
  解压: 
 
 
 
 
  tar xvf kibana-7.5.1-linux-x86_64.tar.gz 
 
 
 
 
  配置: 
 
 
 
 
  confifig/kibana.yml 
 
 
 
 
  #⽣成⼀条测试⽇志数据,从es-head验证是否正常采集 
 
 
 
 
  mkdir -p /root/logs/ 
 
 
 
 
  date >> /root/logs/1.log 
 
 
 
 
  启动: 
 
 
 
 
  4)验证 
 
 
 
 
  启动成功,数据为空,向es提交⼀条数据,通过es-head查询,并通过logstash查询类⽐展示 
 
 
 
 
  下⾯logstash搭建完成后,会再次展示通过采集进⼊的数据 
 
 
 
 
  5)功能 
 
 
 
 
  索引配置 
 
 
 
 
  ⽇志配置 
 
 
 
 
  检索 
 
 
 
 
  图表 
 
 
 
 
  2.2.5 kafka 
 
 
 
 
  1)简介 
 
 
 
 
  Kafka是最初由Linkedin公司开发,是⼀个分布式、分区的、多副本的、多订阅者,基于zookeeper协调 
 
 
 
 
  的分布式⽇志系统(也可以当做MQ系统),常⻅可以⽤于web/nginx⽇志、访问⽇志,消息服务等 
 
 
 
 
  等,Linkedin于2010年贡献给了Apache基⾦会并成为顶级开源项⽬。常⽤于⽇志处理场景。 
 
 
 
 
  2)资源 
 
 
 
 
  http://kafka.apache.org/downloads 
 
 
 
 
  3)部署 
 
 
 
 
  server.port: 9102 
 
 
 
 
  server.host: "0.0.0.0" 
 
 
 
 
  elasticsearch.hosts: "http://localhost:9200" 
 
 
 
 
  kibana.index: ".kibana" 
 
 
 
 
  #kibana默认不允许 
 
 
 
 
  root⽤户启动,可以加--allow-root选项 
 
 
 
 
  nohup sh /opt/app/elk/kibana-7.5.1-linux-x86_64/bin/kibana 
 
 
 
 
  --allow-root > 
 
 
 
 
  /opt/logs/kibana.log & 
 
 
 
 
  #docker启动 
 
 
 
 
  #启动zookeeper 
 
 
 
 
  docker run --name zookeeper \ 
 
 
 
 
  -v /opt/data/zksingle:/data \ 
 
 
 
 
  4)验证 
 
 
 
 
  5)实例操作 
 
 
 
 
  修改logstash从kafka获取,从控制台重新写⼊⼀条⽇志,进kibana查看数据展示情况 
 
 
 
 
  -p 2181:2181 \ 
 
 
 
 
  -e ZOO_LOG4J_PROP="INFO,ROLLINGFILE" \ 
 
 
 
 
  -d zookeeper:3.4.13 
 
 
 
 
  #启动kafka 
 
 
 
 
  docker run -d --name kafka \ 
 
 
 
 
  -p 9103 
 
 
 
 
  :9092 \ 
 
 
 
 
  --link zookeeper:zookeeper \ 
 
 
 
 
  --env 
 
 
 
 
  KAFKA_BROKER_ID 
 
 
 
 
  =100 \ 
 
 
 
 
  --env 
 
 
 
 
  HOST_IP=39.98.133.153 \ 
 
 
 
 
  --env 
 
 
 
 
  KAFKA_ZOOKEEPER_CONNECT 
 
 
 
 
  =zookeeper:2181 \ 
 
 
 
 
  --env 
 
 
 
 
  KAFKA_ADVERTISED_HOST_NAME 
 
 
 
 
  =39.98.133.153 \ 
 
 
 
 
  --env KAFKA_ADVERTISED_PORT=9103 \ 
 
 
 
 
  --restart=always \ 
 
 
 
 
  --volume /etc/localtime:/etc/localtime \ 
 
 
 
 
  wurstmeister/kafka:2.12-2.2.2 
 
 
 
 
  #使⽤zk节点数据验证启动情况 
 
 
 
 
  docker exec -it zookeeper sh 
 
 
 
 
  #进⼊zookeeper后查看节点信息 
 
 
 
 
  ls /brokers 
 
 
 
 
  #进⼊容器 
 
 
 
 
  docker exec -it kafka sh 
 
 
 
 
  /opt/kafka_2.12-2.2.2/bin 
 
 
 
 
  #客户端监听(该步会⾃动创建topic) 
 
 
 
 
  ./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic demo -- 
 
 
 
 
  from-beginning 
 
 
 
 
  #另起⼀个终端,验证发送 
 
 
 
 
  ./kafka-console-producer.sh --broker-list localhost:9092 --topic demo 
 
 
 
 
  input { 
 
 
 
 
  file { 
 
 
 
 
  path => "/root/logs/*.log" 
 
 
 
 
  2.2.6 kafka-manager 
 
 
 
 
  1)简介 
 
 
 
 
    kafka-manager是⽬前最受欢迎的kafka集群管理⼯具,最早由雅⻁开源,⽤户可以在Web界⾯执 
 
 
 
 
  ⾏⼀些简单的集群管理操作。具体⽀持以下内容: 
 
 
 
 
  管理多个集群 
 
 
 
 
  轻松检查群集状态(主题,消费者,偏移,代理,副本分发,分区分发) 
 
 
 
 
  运⾏⾸选副本选举 
 
 
 
 
  使⽤选项⽣成分区分配以选择要使⽤的代理 
 
 
 
 
  运⾏分区重新分配(基于⽣成的分配) 
 
 
 
 
  使⽤可选主题配置创建主题(0.8.1.1具有与0.8.2+不同的配置) 
 
 
 
 
  删除主题(仅⽀持0.8.2+并记住在代理配置中设置delete.topic.enable = true) 
 
 
 
 
  主题列表现在指示标记为删除的主题(仅⽀持0.8.2+) 
 
 
 
 
  批量⽣成多个主题的分区分配,并可选择要使⽤的代理 
 
 
 
 
  批量运⾏重新分配多个主题的分区 
 
 
 
 
  将分区添加到现有主题 
 
 
 
 
  更新现有主题的配置 
 
 
 
 
  2)资源 
 
 
 
 
  start_position => beginning 
 
 
 
 
  add_field => {"from" => "localfile"} 
 
 
 
 
  } 
 
 
 
 
  kafka { 
 
 
 
 
  bootstrap_servers => ["39.98.133.153:9103"] 
 
 
 
 
  group_id => "logstash" 
 
 
 
 
  topics => ["demo"] 
 
 
 
 
  consumer_threads 
 
 
 
 
  => 
 
 
 
 
  1 
 
 
 
 
  decorate_events 
 
 
 
 
  => 
 
 
 
 
  true 
 
 
 
 
  add_field 
 
 
 
 
  => {"from" => "demo"} 
 
 
 
 
  } 
 
 
 
 
  } 
 
 
 
 
  filter { 
 
 
 
 
  } 
 
 
 
 
  output { 
 
 
 
 
  elasticsearch { 
 
 
 
 
  hosts => "localhost:9200" 
 
 
 
 
  index => "mylog" 
 
 
 
 
  } 
 
 
 
 
  stdout { 
 
 
 
 
  } 
 
 
 
 
  } 
 
 
 
 
    https://github.com/yahoo/kafka-manager/releases 
 
 
 
 
    docker库⾥的版本太陈旧,需要从官⽹下载源码包,编译成⼆进制包。具体编译过程参考项⽬主⻚ 
 
 
 
 
  下⾯的Deployment章节。 
 
 
 
 
    部署中直接使⽤打好包的kafka-manager-2.0.0.2.zip,manage版本为2.0.0.2,配置kafka cluster 
 
 
 
 
  最⾼⽀持2.2.0 ,实际验证,可以操作kafka 2.2.2 
 
 
 
 
  3)部署 
 
 
 
 
  4)功能说明 
 
 
 
 
  cluster创建与管理 
 
 
 
 
  Brokers信息查看 
 
 
 
 
  topic创建与管理 
 
 
 
 
  pattern及replica配置 
 
 
 
 
  2.2.7 fifilebeat 
 
 
 
 
  1)简介 
 
 
 
 
    Filebeat是⼀个轻量级⽇志传输Agent,可以将指定⽇志转发到Logstash、Elasticsearch、Kafka、 
 
 
 
 
  Redis等中。Filebeat占⽤资源少,⽽且安装配置也⽐较简单,⽀持⽬前各类主流OS及Docker平台。 
 
 
 
 
  #解压 
 
 
 
 
  unzip kafka-manager-2.0.0.2.zip 
 
 
 
 
  #配置⽂件,修改⽬录下的conf/application.conf 
 
 
 
 
  kafka-manager.zkhosts="localhost:2181" 
 
 
 
 
  #启动,指定端⼝9104 
 
 
 
 
  km_home=./kafka-manager-2.0.0.2 
 
 
 
 
  nohup $km_home/bin/kafka-manager -Dconfig.file=$km_home/conf/application.conf - 
 
 
 
 
  Dhttp.port=9104 > /opt/logs/kibana.log & 
 
 
 
 
  tail -f /opt/logs/kibana.log 
 
 
 
 
  2)资源 
 
 
 
 
  主⻚: 
 
 
 
 
  https://www.elastic.co/cn/products/beats/fifilebeat 
 
 
 
 
  下载: 
 
 
 
 
  wget https://artifacts.elastic.co/downloads/beats/fifilebeat/fifilebeat-7.5.1-linux-x86_64.tar.gz 
 
 
 
 
  3)部署 
 
 
 
 
  解压:tar zxvf fifilebeat-7.5.1-linux-x86_64.tar.gz 
 
 
 
 
  使⽤kafka-manager创建⼀个fifilebeat队列 
 
 
 
 
  配置fifilebeat.yml: 
 
 
 
 
  filebeat.inputs: 
 
 
 
 
  - type: log 
 
 
 
 
  enabled: true 
 
 
 
 
  paths: 
 
 
 
 
  - /root/logs/*.log 
 
 
 
 
  fields: 
 
 
 
 
  from: filebeat启动: 
 
 
 
 
  4)验证 
 
 
 
 
  修改logstash,去掉fifile采集,接收来⾃fifilebeat队列的消息。 
 
 
 
 
  请注意!这⾥有⼀个问题:fifilebeat默认读取字符后,输出的是json格式,上述codec即让logstash解析 
 
 
 
 
  json,但是仍会报错。原因是fifilebeat⾥的host.name属性,需要加⼊fifilter,合并属性名字: 
 
 
 
 
  output.kafka: 
 
 
 
 
  enabled: true 
 
 
 
 
  hosts: ["39.98.133.153:9103"] 
 
 
 
 
  topic: filebeat 
 
 
 
 
  compression: gzip 
 
 
 
 
  processors: 
 
 
 
 
  - drop_fields: 
 
 
 
 
  fields: ["beat" 
 
 
 
 
  , "input", "source", 
 
 
 
 
  "offset","metadata" 
 
 
 
 
  ,"timestamp","agent","ecs","fields"] 
 
 
 
 
  filebeat.config.modules 
 
 
 
 
  : 
 
 
 
 
  path: ${path.config}/modules.d/*.yml 
 
 
 
 
  reload.enabled: true 
 
 
 
 
  logging.level: info 
 
 
 
 
  name: filebeat-server-ip 
 
 
 
 
  cd /opt/app/elk/filebeat-7.5.1-linux-x86_64 
 
 
 
 
  nohup ./filebeat -e -c filebeat.yml >> /opt/logs/filebeat.log & 
 
 
 
 
  tail -f /opt/logs/filebeat.log 
 
 
 
 
  input { 
 
 
 
 
  kafka { 
 
 
 
 
  bootstrap_servers => ["39.98.133.153:9103"] 
 
 
 
 
  group_id => "logstash" 
 
 
 
 
  topics => ["filebeat"] 
 
 
 
 
  consumer_threads => 1 
 
 
 
 
  decorate_events => true 
 
 
 
 
  add_field => {"from" => "filebeat"} 
 
 
 
 
  codec => "json" 
 
 
 
 
  } 
 
 
 
 
  } 
 
 
 
 
  ... 
 
 
 
 
  filter { 
 
 
 
 
  mutate { 
 
 
 
 
  rename => { "[host][name]" => "host" } 
 
 
 
 
  } 
 
 
 
 
  重新录⼊⼀条⽇志信息仅log⽂件,查看logstash stdout⽇志,查看kibana是否正常采集⼊es 
 
 
 
 
  附:fifilebeat输出json格式参考范本 
 
 
 
 
  附:简单⽂本处理命令参考 
 
 
 
 
  } 
 
 
 
 
  { 
 
 
 
 
  "@timestamp" 
 
 
 
 
  : "2019-05-11T07:55:02.127Z", 
 
 
 
 
  "@metadata" 
 
 
 
 
  : { 
 
 
 
 
  "beat" 
 
 
 
 
  : 
 
 
 
 
  "filebeat" 
 
 
 
 
  , 
 
 
 
 
  "type" 
 
 
 
 
  : 
 
 
 
 
  "_doc", 
 
 
 
 
  "version": "7.5.1", 
 
 
 
 
  "topic": "app.log" 
 
 
 
 
  }, 
 
 
 
 
  "ecs": { 
 
 
 
 
  "version": "1.0.0" 
 
 
 
 
  }, 
 
 
 
 
  "log": { 
 
 
 
 
  "offset": 2661796, 
 
 
 
 
  "file": { 
 
 
 
 
  "path": "/var/log/app.log" 
 
 
 
 
  } 
 
 
 
 
  }, 
 
 
 
 
  "message": "05-11 00:10:19.851[DEBUG][http-nio-39545-exec-9] ", 
 
 
 
 
  "fields": { 
 
 
 
 
  "log_topic": "app.log" 
 
 
 
 
  }, 
 
 
 
 
  "host": { 
 
 
 
 
  "name": "172.33.12.109" 
 
 
 
 
  }, 
 
 
 
 
  "agent": { 
 
 
 
 
  "id": "6a86e9d9-e1e8-4b32-b027-f1c936f66e4f", 
 
 
 
 
  "version": "7.0.1", 
 
 
 
 
  "name": "172.33.12.109", 
 
 
 
 
  "type": "filebeat", 
 
 
 
 
  "ephemeral_id": "8326a240-e9de-44f4-b24d-a1c8d2654e19", 
 
 
 
 
  "hostname": "client-ali" 
 
 
 
 
  } 
 
 
 
 
  } 
 
 
 
 
  #列出根下的⽬录 
 
 
 
 
  ls -l 
 
 
 
 
  lrwxrwxrwx. 1 root root 7 Dec 17 09:20 bin -> usr/bin 
 
 
 
 
  dr-xr-xr-x. 5 root root 4096 Dec 24 18:33 boot 
 
 
 
 
  drwxr-xr-x 21 root root 3140 Dec 31 10:39 dev 
 
 
 
 
  drwxr-xr-x. 84 root root 8192 Jan 3 10:09 etc 
 
 
 
 
  drwxr-xr-x. 3 root root 22 Jan 3 09:38 home 
 
 
 
 
  lrwxrwxrwx. 1 root root 7 Dec 17 09:20 lib -> usr/lib 
 
 
 
 
  lrwxrwxrwx. 1 root root 9 Dec 17 09:20 lib64 -> usr/lib64 
 
 
 
 
  ... 
 
 
 
 
  #使⽤grep过滤lib 
 
 
 
 
  开头,并且不要带 
 
 
 
 
  64的 
 
 
 
 
  ll | grep lib | 
 
 
 
 
  grep -v 64 
 
 
 
 
  lrwxrwxrwx. 
 
 
 
 
  1 root root 7 Dec 17 09:20 lib -> usr/lib 
 
 
 
 
  #使⽤awk摘取⽬录名称 
 
 
 
 
  ll | grep lib | grep -v 64 | awk '{print $9}' 
 
 
 
 
  lib 
 
 
 
 
  #awk可以⾃定分隔符,⽤-F 
 
 
 
 
  echo '123#456' 
 
 
 
 
  echo '123#456' | awk -F '#' '{print $2}'