文档章节

Logstash 与Elasticsearch整合使用示例

孤岛旭日
 孤岛旭日
发布于 2015/11/24 13:47
字数 707
阅读 1437
收藏 12

不多废话了,直接上操作步骤:

环境准备

这里使用Docker搭建,我Docker宿主机的IP是192.168.4.99

Zookeeper

docker run -d --name monitor-zk -p 2181:2181 -p 2888:2888 -p 3888:3888 jplock/zookeeper

Kafka

吐嘈一下,docker hub的有不少 kafka ,但好用的太少了

docker run -d \
 --name monitor-kafka \
 -p 9092:9092 \
 -e KAFKA_ADVERTISED_HOST_NAME=192.168.4.99 \
 -e ZOOKEEPER_IP=192.168.4.99 \
 ches/kafka

# Kafka Test(可以忽略)
docker run --rm --interactive ches/kafka  kafka-console-producer.sh --topic m1 --broker-list 192.168.4.99:9092
docker run --rm ches/kafka kafka-console-consumer.sh --topic test --from-beginning --zookeeper 192.168.4.99:2181

参考:

Docker:https://hub.docker.com/r/ches/kafka/

HTTP插件:https://github.com/confluentinc/kafka-rest

SSL加密:https://cwiki.apache.org/confluence/display/KAFKA/Deploying+SSL+for+Kafka

Elasticsearch

这里用2.x版本

docker run -d \
 --name monitor-es \
 -p 9200:9200 -p 9300:9300 \
 -v /opt/monitor/es/data:/usr/share/elasticsearch/data \
 -v /opt/monitor/es/plugins:/usr/share/elasticsearch/plugins \
 elasticsearch:2.0.0 \
 -Des.node.name="Node01" \
 -Des.network.host=::0

参考:

SQL化查询插件:https://github.com/NLPchina/elasticsearch-sql/wiki

Logstash

同样是2.x版本

docker run -d \
 --name monitor-logstash \
 -p 7001-7005:7001-7005 \
 -v /opt/monitor/logstash/config/:/config-dir \
 -v /opt/monitor/logstash/input_test/:/input_test \ # 用于测试File输入的目录映射
 logstash:2.0.0 \
 logstash -f /config-dir/config.conf # 配置文件,后面会介绍

参考:

Kafka输入插件:https://www.elastic.co/guide/en/logstash/current/plugins-inputs-kafka.html

CSV过滤插件:https://www.elastic.co/guide/en/logstash/current/plugins-filters-csv.html

ES输出插件:https://www.elastic.co/guide/en/logstash/current/plugins-filters-elasticsearch.html

Logback输入插件:https://github.com/logstash/logstash-logback-encoder

Log4j输入插件:https://www.elastic.co/guide/en/logstash/current/plugins-inputs-log4j.html

Websocket输出插件:https://www.elastic.co/guide/en/logstash/current/plugins-outputs-websocket.html

Logstash 配置

在上面环境准备的最后一步我们启动了Logstash,其中引用到了一个config.conf的配置文件,它的格式如下:

input { 
  kafka { # 这个用于kafka输入
    type => 'key_trace_log'
    topic_id => 'format_key_trace_topic'
    zk_connect => '192.168.4.99:2181'
  } 
  log4j { # 这个用于Log4j输入
    type => 'tp_log_test1'
    mode => 'server'
    host => '0.0.0.0'
    port => 7001
  } 
  tcp { # 这个用于Logback输入
    type => 'tp_log_test2'
    host => '0.0.0.0'
    port => 7002
    codec => 'json_lines'
  }
  file { # 这个用于File输入
    type => 'tp_log_test3'
    path => ['/input_test/logs/*.log'] # 这是文件所在的目录
    start_position => 'beginning'
  }
}
filter {
  if [type] == 'key_trace_log' {
    csv { # Kafka输入的个message,这里假设是用tab分隔的,对应的字段如下
      separator => '	'
      columns => ['level','time','job_code','task_code','clue_value','node_code','stage','message']
    }
  }
  if [type] == 'tp_log_test3' {
    grok { # 对于File输入的数据需要做正则解析,下面正则解析的内容类似:2015-11-24 11:28:58  [ main:4234 ] - [ DEBUG ]  logstash slf4j test loop 109
      pattern => '(?<datetime>.{19}) *\[ (?<class>.*):(?<line>\d*) \] - \[ (?<level>.*) \] (?<msg>.*)'
    }
  }
}
output {
  if [type] == 'key_trace_log' {
    elasticsearch {
      hosts => ['192.168.4.99:9200']
      index => 'monitor_key_trace_log'
      document_type => 'default'
    }
    websocket {
      host => '0.0.0.0'
      port => 7005
    }
  }
  if [type] == 'tp_log_test1' {
    elasticsearch {
      hosts => ['192.168.4.99:9200']
      index => 'tp_log'
      document_type => 'test1'
    }
  }
  if [type] == 'tp_log_test2' {
    elasticsearch {
      hosts => ['192.168.4.99:9200']
      index => 'tp_log'
      document_type => 'test2'
    }
  }
  if [type] == 'tp_log_test3' {
    elasticsearch {
      hosts => ['192.168.4.99:9200']
      index => 'tp_log'
      document_type => 'test3'
    }
  }
  stdout { codec => rubydebug }
}

几点说明:

Logback 需要有专门的插件

在目标系统中加入依赖:

<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>4.5.1</version>
</dependency>

修改logback.xml,加入:

<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
    <destination>192.168.4.99:7002</destination>
    <encoder class="net.logstash.logback.encoder.LogstashEncoder" />
    <keepAliveDuration>5 minutes</keepAliveDuration>
</appender>

<root level="TRACE">
    <appender-ref ref="logstash"/>
</root>

Log4j 需要加上Socket适配

log4j.appender.SOCKET=org.apache.log4j.net.SocketAppender
log4j.appender.SOCKET.port=7001
log4j.appender.SOCKET.remoteHost=192.168.4.99

grok测试

http://grokdebug.herokuapp.com/

© 著作权归作者所有

共有 人打赏支持
孤岛旭日
粉丝 41
博文 58
码字总数 30599
作品 3
杭州
架构师
VulnWhisperer:数据可被ElasticSearch索引的漏洞数据及报告整合工具

  VulnWhisperer是一个漏洞数据和报告的整合工具。VulnWhisperer会提取所有报告并创建一个具有唯一文件名的文件,然后将其发送给logstash。Logstash则会从文件名中提取数据标记报告中的所有...

FreeBuf
07/26
0
0
logstash、elasticsearch、kibana搭建日志平台

1、下载logstash a、官方下载地址:https://www.elastic.co/downloads/logstash b、解压:tar -xzvf logstash-5.1.1.tar.gz c、设置用户测试的配置文件:vim logstatsh_test.conf,编辑内容如...

binhu
05/23
0
0
CentOS下使用ELK套件搭建日志分析和监控平台

1 概述 ELK套件(ELK stack)是指ElasticSearch、Logstash和Kibana三件套。这三个软件可以组成一套日志分析和监控工具。 由于三个软件各自的版本号太多,建议采用ElasticSearch官网推荐的搭配...

周宇1991
06/29
0
0
基于Bro的应用层数据包识别工具

  拓扑介绍   应用识别系统将会通过bro识别应用并生成日志。ELK部署在远程端,用于收集,分析,存储和识别所有日志。BRO安装在IP为192.168.1.147的机器上,ELK安装在IP为192.168.1.142的...

FreeBuf
前天
0
0
ELK+Filebeat+Nginx集中式日志解决方案(二)——添加ElasticSearch集群

一、使用说明: Elasticsearch插件: Elasticsearch常用的几个插件为: # head 地址 https://github.com/mobz/elasticsearch-head mobz/elasticsearch-head kopf 地址 https://github.com/l......

在下郑小明
06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java并发备忘

不安全的“先检查后执行”,代码形式如下: if(条件满足){ //这里容易出现线程安全问题//doSomething}else{//doOther} 读取-修改-写入 原子操作:使用CAS技术,即首先从V中读取...

Funcy1122
今天
0
0
SpringBoot2.0 停机

最近新建了个SpringBoot2.0的项目,因为原来一直使用的是传统的Tomcat部署war包的形式,所以这次SpringBoot内置Tomcat部署jar包的时候遇到了很多问题。其中一个就是因为没有外置的Tomcat容器...

Canaan_
昨天
0
1
Confluence 6 外部参考

一个外部参考的意思是任何站点链接到你 Confluence 的实例。任何时候当 Confluence 的用户单击这个外部链接的时候,Confluence 可以记录这次单击为参考。 在默认的情况下,外部链接的参考链接...

honeymose
昨天
0
0
Android中的设计模式之抽象工厂模式

参考 《设计模式解析》 第十一章 Abstract Factory模式 《设计模式:可复用面向对象软件的基础 》3.1 Abstract Factory 抽象工厂 对象创建型模式 《Android源码设计模式解析与实战》第6章 创...

newtrek
昨天
0
0
Redis | 地理空间(GEO)的一个坑

Redis的地理空间(Geo)是个好东西,轻轻松松的就可以把地图描点的问题处理了, 最近却遇到一个坑...Redis采用的Msater-Slave模式, 运用GEORADIUS在salve读取对应的数据,新增了从节点但是从不返...

云迹
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部