Logstash 是一款强大的数据处理工具,它可以实现数据传输,格式处理,格式化输出,还有强大的插件功能,常用于日志处理。

一、原理

  • Input
    可以从文件中、存储中、数据库中抽取数据,Input有两种选择一个是交给Filter进行过滤、修剪。另一个是直接交给Output
  • Filter
    能够动态地转换和解析数据。可以通过自定义的方式对数据信息过滤、修剪
  • Output
    提供众多输出选择,您可以将数据发送到您要指定的地方,并且能够灵活地解锁众多下游用例。

二、安装使用

1.安装

wget https://artifacts.elastic.co/downloads/logstash/logstash-6.0.1.rpm
yum install -y ./logstash-6.0.1.rpm

2.Logstash配置文件

vim /etc/logstash/logstash.yml
path.data: /var/lib/logstash # 数据存放路径
path.config: /etc/logstash/conf.d/*.conf # 其他插件的配置文件,输入输出过滤等等
path.logs: /var/log/logstash # 日志存放路径

3.Logstash中的JVM配置文件

Logstash是一个基于Java开发的程序,需要运行在JVM中,可以通过配置jvm.options来针对JVM进行设定。比如内存的最大最小、垃圾清理机制等等。这里仅仅列举最常用的两个。
JVM的内存分配不能太大不能太小,太大会拖慢操作系统。太小导致无法启动。

vim /etc/logstash/jvm.options                               # logstash有关JVM的配置
-Xms256m # logstash最大最小使用内存
-Xmx1g

4.最简单的日志收集配置

安装一个httpd用于测试,配置Logstash收集Apache的accless.log日志文件

yum install httpd
echo "Hello world" > /var/www/html/index.html # 安装httpd,创建首页用于测试
vim /etc/logstash/conf.d/test.conf
input {
file { # 使用file作为数据输入
path => ['/var/log/httpd/access_log'] # 设定读入数据的路径
start_position => beginning # 从文件的开始处读取,end从文件末尾开始读取
}
}
output { # 设定输出的位置
stdout {
codec => rubydebug # 输出至屏幕
}
}

5.测试配置文件

logstash是自带的命令但是没有再环境变量中,所以只能使用绝对路径来使用此命令。

/usr/share/logstash/bin/logstash -t  -f  /etc/logstash/conf.d/test.conf   # 测试执行配置文件,-t要在-f前面
Configuration OK # 表示测试OK

6.启动logstash

在当前会话运行logstash后不要关闭这个会话暂时称其为会话1,再打开一个新的窗口为会话2

/usr/share/logstash/bin/logstash  -f  /etc/logstash/conf.d/test.conf

启动以后在会话2中使用curl命令进行测试

curl 172.18.68.14

然后在回到之前的会话1可以看到输出的信息

{
"@version" => "1",
"host" => "logstash.shuaiguoxia.com",
"path" => "/var/log/httpd/access_log",
"@timestamp" => 2017-12-10T14:07:07.682Z,
"message" => "172.18.68.14 - - [10/Dec/2017:22:04:44 +0800] \"GET / HTTP/1.1\" 200 12 \"-\" \"curl/7.29.0\""
}

至此最简单的Logstash配置就已经完成了,这里仅仅是将收集到的直接输出没有进行过滤或者修剪。

三、Elasticsearch与Logstash

上面的配置时Logsatsh从日志文件中抽取数据,然后输出至屏幕。那么在生产中往往是将抽取的数据过滤后输出到Elasticsearch中。下面讲解Elasticsearch结合Logstash

Logstash抽取httpd的access.log文件,然后经过过滤(结构化)之后输出给Elasticsearch Cluster,在使用Head插件就可以看到抽取到的数据。(Elasticsearch Cluster与Head插件搭建请查看前两篇文章)

  • 配置Logstash

    vim /etc/logstash/conf.d/test.conf
    input {
    file {
    path => ['/var/log/httpd/access_log']
    start_position => "beginning"
    }
    }
    filter {
    grok {
    match => {
    "message" => "%{COMBINEDAPACHELOG}"
    } remove_field => "message"
    }
    }
    output {
    elasticsearch {
    hosts => ["http://172.18.68.11:9200","http://172.18.68.12:9200","http://172.18.68.13:9200"]
    index => "logstash-%{+YYYY.MM.dd}"
    action => "index"
    document_type => "apache_logs"
    }
    }
  • 启动Logstash

     /usr/share/logstash/bin/logstash -t -f /etc/logstash/conf.d/test.conf       # 测试配置文件
    Configuration OK
    /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/test.conf # 启动Logstash
  • 测试
    每个执行10次172.18.68.14,位Logstash的地址

    curl 127.0.0.1
    curl 172.18.68.14
  • 验证数据
    使用浏览器访问172.18.68.11:9100(Elastisearch 安装Head地址,前面文章有讲)
    选择今天的日期,就能看到一天内访问的所有数据。

四、监控其他

  • 监控Nginx日志
    仅仅列了filter配置块,input与output参考上一个配置

    filter {
    grok {
    match => {
    "message" => "%{HTTPD_COMBINEDLOG} \"%{DATA:realclient}\""
    }
    remove_field => "message"
    }
    date {
    match => ["timestamp","dd/MMM/YYYY:H:m:s Z"]
    remove_field => "timestamp"
    }
    }
  • 监控Tomcat
    仅仅列了filter配置块,input与output参考上一个配置

    filter {
    grok {
    match => {
    "message" => "%{HTTPD_COMMONLOG}"
    }
    remove_field => "message"
    }
    date {
    match => ["timestamp","dd/MMM/YYYY:H:m:s Z"]
    remove_field => "timestamp"
    }
    }

五、Filebeat

现在已经搭建成在节点安装Logstash并发送到Elasticsearch中去,但是Logstash是基于Java开发需要运行在JVM中,所以是一个重量级采集工具,仅仅对于一个日志采集节点来说使用Logstash太过重量级,那么就可以使用一个轻量级日志收集工具Filebeat来收集日志信息,Filebeat同一交给Logstash进行过滤后再Elasticsearch。这些在接下来的文章在进行讲解,先放一张架构图吧。

Elasticsearch的基友Logstash(转)的更多相关文章

  1. Elasticsearch的基友Logstash

    Logstash 是一款强大的数据处理工具,它可以实现数据传输,格式处理,格式化输出,还有强大的插件功能,常用于日志处理. 一.原理 Input 可以从文件中.存储中.数据库中抽取数据,Input有两 ...

  2. 如何在elasticsearch中查看Logstash打到elasticsearch的数据

    # cat syslog02.conf #filename:syslog02.conf #注意这个是要用#号注释掉 input{ file{ path => ["/var/log/*. ...

  3. ElasticSearch Kibana 和Logstash 安装x-pack记录

    前言 最近用到了ELK的集群,想想还是用使用官方的x-pack的monitor功能对其进行监控,这里先上图看看: 环境如下: 操作系统: window 2012 R2 ELK : elasticsea ...

  4. elasticsearch查询及logstash简介

    Query DSL: request body: 分成两类: query dsl:执行full-text查询时,基于相关度来评判其匹配结果: 查询执行过程复杂,且不会被缓存: filter dsl:执 ...

  5. Filebeat之input和output(包含Elasticsearch Output 、Logstash Output、 Redis Output、 File Output和 Console Output)

    前提博客 https://i.cnblogs.com/posts?categoryid=972313 Filebeat啊,根据input来监控数据,根据output来使用数据!!! Filebeat的 ...

  6. Docker安装ElasticSearch 以及使用LogStash实现索引库和数据库同步

    1:下载 ElasticSearch 镜像 docker pull docker.io/elasticsearch:5.6.8 2:创建 ElasticSearch 容器: 注意:5.0默认分配jvm ...

  7. Elasticsearch、Logstash、Kibana搭建统一日志分析平台

    // // ELKstack是Elasticsearch.Logstash.Kibana三个开源软件的组合.目前都在Elastic.co公司名下.ELK是一套常用的开源日志监控和分析系统,包括一个分布 ...

  8. ELK日志系统:Elasticsearch + Logstash + Kibana 搭建教程

    环境:OS X 10.10.5 + JDK 1.8 步骤: 一.下载ELK的三大组件 Elasticsearch下载地址: https://www.elastic.co/downloads/elast ...

  9. 【转】ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台

    [转自]https://my.oschina.net/itblog/blog/547250 摘要: 前段时间研究的Log4j+Kafka中,有人建议把Kafka收集到的日志存放于ES(ElasticS ...

随机推荐

  1. Windows中snmputil.exe工具的使用

    一.检查windows 系统是否安装了 snmp 组件.可以在 cmd 中输入"net start snmp" 就可以出现显示信息了 二. snmputil,就是程序名拉,呵呵. ...

  2. Dicom格式文件解析器[转]

    Dicom格式文件解析器   Dicom全称是医学数字图像与通讯,这里讲的暂不涉及通讯那方面的问题 只讲*.dcm 也就是diocm格式文件的读取,读取本身是没啥难度的 无非就是字节码数据流处理.只不 ...

  3. linux下jdk_tomcat+mysql配置那点事

    (1)上传环境压缩包 apache-tomcat-7.0.47.tar.gz, jdk-7u71-linux-x64.gz, mysql-5.6.14.tar.gz通过xftp工具上传到/usr/lo ...

  4. RESTful Web服务的操作

    1.首先我们说一下Http协议是无状态的 HTTP协议是无状态的,我们看到查到的用到的返回404,500,200,201,202,301.这些不是HTTP协议的状态码. 是HTTP的状态码,就是HTT ...

  5. Array相关的属性和方法

    这里只是做了相关的列举,具体的使用方法,请参考网址. Array 对象属性 constructor 返回对创建此对象的数组函数的引用. var test=new Array(); if (test.c ...

  6. http 请求报文

    1.报文 2.http请求方法 restful接口 post:创建 put:更新

  7. cmake交叉编译android(转)

    生成cmake编译所需的文件 #-H指向CMakeLists.txt文件父级目录 #-B指向中间产物目录 #-DCMAKE_LIBRARY_OUTPUT_DIRECTORY指向so输出目录 #-DCM ...

  8. JDK提供的四种线程池

    一.线程池什么时候用,有什么好处? “线程池”顾名思义,就是存放线程的池子,这个池子可以存放多少线程取决于采用哪种线程池,取决于有多少并发线程,有多少计算机的硬件资源.使用线程池最直接的好处就是:线程 ...

  9. 亲历H5移动端游戏微信支付接入及那些坑(四)——参考文档

    写完三篇后,我觉得微信支付的文档确实比较乱,所以在此做一个整理汇总 支付流程相关文档 一下文档已经按照接入顺序排列,请依次参考阅读 微信公众号网页授权两种access_token区别,获取用户open ...

  10. V-rep学习笔记:机器人模型创建3—搭建动力学模型

    接着之前写的V-rep学习笔记:机器人模型创建2—添加关节继续机器人创建流程.如果已经添加好关节,那么就可以进入流程的最后一步:搭建层次结构模型和模型定义(build the model hierar ...