文档章节

Logstash 与Elasticsearch整合使用示例

孤岛旭日
 孤岛旭日
发布于 2015/11/24 13:47
字数 707
阅读 1475
收藏 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/

© 著作权归作者所有

共有 人打赏支持
孤岛旭日
粉丝 42
博文 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
ELK技术栈ElasticSearch,Logstash,Kibana

基础部分 工作原理 es增删改内部原理 ELK集群安装部署 文档管理 索引管理 搜索 聚合分析 分词 数据建模 Java api 零停机 index segment merge 乐观锁并发控制 索引别名 相关度评分算法与定制...

马士兵优效学院
08/19
0
0
Logstash迁移Elasticsearch数据方法解读

Elasticsearch中数据搬迁是工程师们经常会做的,有时是为了集群迁移、有时是为了数据备份、有时是为了升级等等,迁移的方式也有很多种,比如说通过elasticsearch-dump、通过snapshot、甚至是...

pcdog
05/21
0
0
使用logstash+elasticsearch+kibana快速搭建日志平台

日志的分析和监控在系统开发中占非常重要的地位,系统越复杂,日志的分析和监控就越重要,常见的需求有: 根据关键字查询日志详情 监控系统的运行状况 统计分析,比如接口的调用次数、执行时间...

eddy_linux
2015/11/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Shiro | 实现权限验证完整版

写在前面的话 提及权限,就会想到安全,是一个十分棘手的话题。这里只是作为学校Shiro的一个记录,而不是,权限就应该这样设计之类的。 Shiro框架 1、Shiro是基于Apache开源的强大灵活的开源...

冯文议
今天
1
0
linux 系统的运行级别

运行级别 运行级别 | 含义 0 关机 1 单用户模式,可以想象为windows 的安全模式,主要用于修复系统 2 不完全的命令模式,不含NFS服务 3 完全的命令行模式,就是标准的字符界面 4 系统保留 5 ...

Linux学习笔记
今天
2
0
学习设计模式——命令模式

任何模式的出现,都是为了解决一些特定的场景的耦合问题,以达到对修改封闭,对扩展开放的效果。命令模式也不例外: 命令模式是为了解决命令的请求者和命令的实现者之间的耦合关系。 解决了这...

江左煤郎
今天
3
0
字典树收集(非线程安全,后续做线程安全改进)

将500W个单词放进一个数据结构进行存储,然后进行快速比对,判断一个单词是不是这个500W单词之中的;来了一个单词前缀,给出500w个单词中有多少个单词是该前缀. 1、这个需求首先需要设计好数据结...

算法之名
昨天
15
0
GRASP设计模式

此文参考了这篇博客,建议读者阅读原文。 面向对象(Object-Oriented,OO)是当下软件开发的主流方法。在OO分析与设计中,我们首先从问题领域中抽象出领域模型,在领域模型中以适当的粒度归纳...

克虏伯
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部