分布式日志收集之Logstash 笔记(一)

(一)logstash是什么?

logstash是一种分布式日志收集框架,开发语言是JRuby,当然是为了与Java平台对接,不过与Ruby语法兼容良好,非常简洁强大,经常与ElasticSearch,Kibana配置,组成著名的ELK技术栈,非常适合用来做日志数据的分析。

当然它可以单独出现,作为日志收集软件,你可以收集日志到多种存储系统或临时中转系统,如MySQL,redis,kakfa,HDFS, lucene,solr等并不一定是ElasticSearch。

官网下载地址:https://www.elastic.co/downloads/logstash 
官网文档地址:https://www.elastic.co/guide/en/logstash/current/index.html

(二)logstash的的安装

logstash的目前的最新版本是2.0.0,建议安装在Linux平台,虽然它也支持Windows平台,但可能会有问题 
下载: 
wget https://download.elastic.co/logstash/logstash/logstash-2.0.0.tar.gz

解压: 
tar -zxvf logstash-2.0.0.tar.gz

进入根目录,执行bin/logstash -h 可查看帮助文档 
参数介绍如下:

使用命令模板: 
    /bin/logstash 命令参数  选项

选项: 
    -f , 指定加载一个后缀为.conf文件的logstash配置模块 
    -e  , 命令行指定参数 , 通常用来调试 
    -w,  指定logstash的工作线程数 
    -l,   指定logstash的默认日志写入到一个文件中,如果不指定,默认是标准输出 
    --quiet                       静默模式,仅仅只有error级别信息输出 
    --verbose                   info级别的log输出 
    --debug                      debug 级别的log输出. 
    -V, --version                查看logstash的版本 
    -p, --pluginpath PATH         加载自定义的logstash插件 
    -t, --configtest               检查logstash配置是否有效 
    -h, --help                    打印帮助

(三)logstash的数据处理模型

(1)input  =》 output 
(2)input =》 filter =》 output

其中input常用的输入源有:file,syslog,redis,log4j,apache log或nginx log,或者其他一些自定义的log格式,业务log,搜索log,订单log等等

filter常用的选项有: 
grok:支持正则提取任何非结构化数据或结构化数据,其中logstash内置120多种正则,比如常见的时间,ip,用户名,等等也支持自定义正则解析 
mutate:修改字段名,删除,更新等操作,转换字段类型等 
drop: 删除某些时间,如debug 
clone:拷贝一份事件副本,用来添加或删除字段 
geoip : 通过ip获取地理位置信息,在做kibana区域统计图非常炫 
ruby: 支持原生的ruby代码,操作事件,实现强大的其他功能

output常用的输出有: 
elasticsearch 比较常用 
file:写入文件 
redis:写入队列 
hdfs:写入HDFS,需插件支持 
zabbix: zabbix监控 
mongodb:写入mongodb库

除此之外还有个编码插件codecs也比较常用 
常用来处理json数据或者多行数据源

(四)logstash一些简单例子

(1)使用命令行命令调试:

[java]
 
view plain
copy

  1. [search@h3 logstash-2.0.0]$ bin/logstash -e "input{stdin{}} output{stdout{}}"
  2. Default settings used: Filter workers: 1
  3. Logstash startup completed
  4. hello
  5. 2015-11-04T15:16:02.747Z h3 hello
  6. test
  7. 2015-11-04T15:16:08.108Z h3 test

(2)命令行参数仅适合简单的配置,如果配置比较多,我们一般会写入一个以.conf结尾的配置文件里,然后使用 
-f命令加载,将(1)中的配置,写入hello.conf

然后使用bin/logstash -f hello.conf  执行加载,即可达到同样效果

(3)常用的数据模块

[java]
 
view plain
copy

  1. <pre name="code" class="java">input{
  2. .....
  3. }
  4. filter{
  5. ......
  6. }
  7. output{
  8. .......
  9. }

(4)监听文件,支持通配符,写入文件

[java]
 
view plain
copy

  1. input{
  2. file => ["/var/log/file","/var/solr/log/*"]
  3. }
  4. output{
  5. file => "/sys/collect/log"
  6. }

(5)logstash插件支持数据类型

[java]
 
view plain
copy

  1. 数组: path=> ["a","b"]
  2. 布尔:ssl_enable => true
  3. 字节:
  4. my_bytes =>"1113"#1113 bytes
  5. my_bytes =>"10MiB"#10485760 bytes
  6. my_bytes =>"100kib"#102400 bytes
  7. my_bytes =>"180 mb"#180000000 bytes
  8. 编码:
  9. codec => "json"
  10. 哈希表:
  11. match => {
  12. "k1" => "v1"
  13. "k2" => "v2"
  14. "k3" => "v3"
  15. }
  16. 数值:
  17. port=> 33
  18. 密码:
  19. pwd=> "password"
  20. 路径:
  21. path=> "/tmp/logstash"
  22. 字符串:
  23. name => "hello wordld"
  24. 注释:
  25. input{
  26. # 号开头,与shell脚本注释一样
  27. }

时间: 2025-01-15 23:11:03

分布式日志收集之Logstash 笔记(一)的相关文章

打造分布式日志收集系统

前言 系统一大,就会拆分成多个独立的进程,比如web+wcf/web api等,也就成了分布式系统. 要看一个请求怎么从头到尾走的,就有些困难了,要是进行DEBUG.跟踪,就更加麻烦了,困难程度要视进程多少而定,越多越复杂. 分布式日志收集系统就登场了. 今天介绍一款 全开源日志收集.展示系统 - logstash(基于java)+kibana(基于JRuby, logstash已自带)+ElasticSearch+RabbitMQ 架构图如下 这张图是拷贝来的 里面虽然是Redis,但是没关系

传统ELK分布式日志收集的缺点?

传统ELK图示: 单纯使用ElK实现分布式日志收集缺点? 1.logstash太多了,扩展不好. 如上图这种形式就是一个 tomcat 对应一个 logstash,新增一个节点就得同样的拥有 logstash,可以说很浪费了. 2.读取IO文件,可能会产生日志丢失. 3.不是实时性 比如logstash,底层通过定时器发现数据库发生变化后才去同步,由于是定时则必然出现延迟. 那么既然出现了这些问题,有什么解决方案呢? 安装kafka kafka是基于发布订阅模式的,类似于生产者与消费者. 一张图

分布式日志收集系统Apache Flume的设计详细介绍

问题导读: 1.Flume传输的数据的基本单位是是什么? 2.Event是什么,流向是怎么样的? 3.Source:完成对日志数据的收集,分成什么打入Channel中? 4.Channel的作用是什么? 5.取出Channel中的数据,进行相应的存储文件系统,数据库,或者提交到远程服务器,由谁来完成? 6.Flume支那些数据格式? 7.对于直接读取文件Source,有两种方式,分别是什么? 8.Channel有多种方式有哪些方式? 概述Flume是Cloudera公司的一款高性能.高可能的分布

分布式日志收集系统实践(视频教程)

日志收集软件五花八门,最终用户没有精力,也不可能把所有的日志工具都拿过来试一遍,很多企业常见架构如图1所示. 图1 传统日志收集架构 这种架构中,除了日志标准化问题.存储的性能问题,关键是在故障来临时,无法在上亿条的日志中迅速找出故障日志,及诱发因素.接着我们看看OSSIM系统是如何处理的. 图2 分布式日志收集 在图2中,展示了基于OSSIM的分布式日志收集架构,其中还包含了Redis+RabbitMQ消息中间件处理系统,技术实现已经在<开源安全运维平台OSSIM最佳实践>中讲述,下面为大家

Flume可分布式日志收集系统

Flume 1. 前言 flume是由cloudera软件公司产出的可分布式日志收集系统,后与2009年被捐赠了apache软件基金会,为hadoop相关组件之一.尤其近几年随着flume的不断被完善以及升级版本的逐一推出,特别是flume-ng;同时flume内部的各种组件不断丰富,用户在开发的过程中使用的便利性得到很大的改善,现已成为apache top项目之一. 2. 概述 2.1. 什么是flume?http://flume.apache.org/index.html Apache Fl

flume分布式日志收集测试

官方参考文档 https://flume.apache.org/FlumeUserGuide.html#file-channel Flume NG是一个分布式.可靠.可用的系统,它能够将不同数据源的海量日志数据进行高效收集.聚合.移动,最后存储到一个中心化数据存储系统中.由原来的Flume OG到现在的Flume NG,进行了架构重构,并且现在NG版本完全不兼容原来的OG版本.经过架构重构后,Flume NG更像是一个轻量的小工具,非常简单,容易适应各种方式日志收集,并支持failover和负载

分布式日志收集系统:Flume

Flume知识点: Event 是一行一行的数据 1.flume是分布式的日志收集系统,把收集来的数据传送到目的地去. 2.flume里面有个核心概念,叫做agent.agent是一个java进程,运行在日志收集节点. 3.agent里面包含3个核心组件:source.channel.sink. 3.1 source组件是专用于收集日志的,可以处理各种类型各种格式的日志数据,包括avro.thrift.exec.jms.spooling directory.netcat.sequence gen

Flume分布式日志收集系统

1.flume是分布式的日志收集系统,把收集来的数据传送到目的地去.2.flume里面有个核心概念,叫做agent.agent是一个java进程,运行在日志收集节点.通过agent接收日志,然后暂存起来,再发送到目的地.3.agent里面包含3个核心组件:source.channel.sink. 3.1 source组件是专用于收集日志的,可以处理各种类型各种格式的日志数据,包括avro.thrift.exec.jms.spooling directory.netcat.sequence gen

在.NET Core中使用Exceptionless分布式日志收集框架

一.Exceptionless简介 Exceptionless 是一个开源的实时的日志收集框架,它可以应用在基于 ASP.NET,ASP.NET Core,Web Api,Web Forms,WPF,Console,MVC 等技术栈的应用程序中,并且提供了Rest接口可以应用在 Javascript,Node.js 中.它将日志收集变得简单易用并且不需要了解太多的相关技术细节及配置.在以前,我们做日志收集大多使用 Log4net,Nlog 等框架,在应用程序变得复杂并且集群的时候,可能传统的方式