单个进程 logstash 可以实现对数据的读取、解析和输出处理。但是在生产环境中,从每台应用服务器运行 logstash 进程并将数据直接发送到 Elasticsearch 里,显然不是第一选择:第一,过多的客户端连接对 Elasticsearch 是一种额外的压力;第二,网络抖动会影响到 logstash 进程,进而影响生产应用;第三,运维人员未必愿意在生产服务器上部署 Java,或者让 logstash 跟业务代码争夺 Java 资源。

  所以,在实际运用中,logstash 进程会被分为两个不同的角色。运行在应用服务器上的,尽量减轻运行压力,只做读取和转发,这个角色叫做 shipper;运行在独立服务器上,完成数据解析处理,负责写入 Elasticsearch 的角色,叫 indexer。

  Kafka 是一个高吞吐量的分布式发布订阅日志服务,具有高可用、高性能、分布式、高扩展、持久性等特性。和Redis做轻量级消息队列不同,Kafka利用磁盘做消息队列,所以也就无所谓消息缓冲时的磁盘问题。生产环境中还是推荐使用Kafka做消息队列。此外,如果公司内部已经有 Kafka 服务在运行,logstash也可以快速接入,免去重复建设的麻烦。

一、Logstash搭建

  详细搭建可以参考Logstash安装搭建(一)

二、配置Shipper

  Shipper 即为Nginx服务器上运行的 logstash 进程,logstash 通过 logstash-input-file 写入,然后通过 logstash-output-kafka 插件将日志写入到 kafka 集群中。

  Logstash使用一个名叫 FileWatch 的 Ruby Gem 库来监听文件变化。这个库支持 glob 展开文件路径,而且会记录在 .sincedb 的数据库文件来跟踪被监听的日志文件的当前读取位置。

  1. .sincedb 文件中记录了每个被监听的文件的 inode, major number, minor number pos 

  Input配置实例

  1. input {
  2. file {
  3. path => "/var/log/nginx/log_access.log"
  4. type => "nginx-access"
  5. discover_interval => #logstash 每隔多久去检查一次被监听的 path 下是否有新文件。默认值是 15 秒。
  6. sincedb_path => "/etc/logstash/.sincedb" #定义sincedb文件的位置
  7. start_position => "beginning" #定义文件读取的位置
  8. }
  9. }

  其他配置详解:

  1. exclude 不想被监听的文件可以排除出去。
  2. close_older 已经监听的文件,若超过这个时间内没有更新,就关闭监听该文件的句柄。默认为:3600s,即一小时。
  3. ignore_older 在每次检查文件列表时,若文件的最后修改时间超过该值,则忽略该文件。默认为:86400s,即一天。
  4. sincedb_path 定义 .sincedb 文件路径,默认为 $HOME/.sincedb
  5. sincedb_write_interval 间隔多久写一次sincedb文件,默认15s
  6. stat_interval 每隔多久检查被监听文件状态(是否有更新),默认为1s
  7. start_position logstash从什么位置开始读取文件数据。默认为结束位置,类似 tail -f 的形式。设置为“beginning”,则从头读取,类似 cat ,到最后一行以后变成为 tail -f

  Output配置实例

  以下配置可以实现对 kafka producer 的基本使用。生产者更多详细配置请查看 Kafka 官方文档中生产者部分配置文档

  1. output {
  2. kafka {
  3. bootstrap_servers => "localhost:9092" #生产者
  4. topic_id => "nginx-access-log" #设置写入kafka的topic
  5. compression_type => "snappy" #消息压缩模式,默认是none,可选gzip、snappy。
  6. }
  7. }

  logstash-out-kafka 其他配置详解:

  1. compression_type 消息压缩模式,默认是none,有效值为:nonegzipsnappy
  2. asks 消息确认模式,默认为1,有效值为:、、all。设置为0,生产者不等待 broker 回应;设置为1,生产者会收到 leader 写入之后的回应;设置为all leader 将要等待 in-sync 中所有的 replication 同步确认。
  3. send_buffer_bytes TCP发送数据时的缓冲区的大小。

  logstash-kafka 插件输入和输出默认 codec 为 json 格式。在输入和输出的时候注意下编码格式。消息传递过程中 logstash 默认会为消息编码内加入相应的时间戳和 hostname 等信息。如果不想要以上信息(一般做消息转发的情况下),可以使用以下配置,例如:

  1. output {
  2. kafka {
  3. codec => plain {
  4. format => "%{message}"
  5. }
  6. }
  7. }

三、搭建配置Kafka

  搭建配置Kafka可以参考 Kafka集群搭建

四、配置Indexer

  是用logstash-input-kafka插件,从kafka集群中读取数据。

  Input配置示例:

  1. input {
  2. kafka {
  3. zk_connect => "localhost:2181" #zookeeper地址
  4. topic_id => "nginx-access-log" #kafka中topic名称,记得创建该topic
  5. group_id => "nginx-access-log" #默认为“logstash”
  6. codec => "plain" #与Shipper端output配置项一致
  7. consumer_threads => #消费的线程数
  8. decorate_events => true #在输出消息的时候回输出自身的信息,包括:消费消息的大小、topic来源以及consumer的group信息。
  9. type => "nginx-access-log"
  10. }
  11. }

  更多 logstash-input-kafka 配置可以从 logstash 官方文档 查看。

  Logstash 是一个 input | decode | filter | encode | output 的数据流。上述配置中有 codec => "plain" ,即logstash 采用转发的形式,不会对原有信息进行编码转换。丰富的过滤器插件(Filter)的存在是 logstash 威力强大的重要因素,提供的不单单是过滤的功能,可以进行复杂的逻辑处理,甚至无中生有添加新的logstash事件到后续的流程中去。这里只列举 logstash-output-elasticsearch 配置。

  logstash-output-elasticsearch 配置实例:

  1. output {
  2. elasticsearch {
  3. hosts => ["localhost:9200"] //Elasticsearch 地址,多个地址以逗号分隔。
  4. index => "logstash-%{type}-%{+YYYY.MM.dd}" //索引命名方式,不支持大写字母(Logstash除外)
  5. document_type => "%{type}" //文档类型
  6. workers =>
  7. flush_size => //向Elasticsearch批量发送数据的条数
  8. idle_flush_time => //向Elasticsearch批量发送数据的时间间隔,即使不满足 flush_size 也会发送
  9. template_overwrite => true //设置为true,将会把自定义的模板覆盖logstash自带模板
  10. }
  11. }

到此就已经把Nginx上的日志转发到Elasticsearch中。

logstash通过kafka传输nginx日志(三)的更多相关文章

  1. logstash redis kafka传输 haproxy日志

    logstash 客户端收集 haproxy  tcp日志 input { file { path => "/data/haproxy/logs/haproxy_http.log&qu ...

  2. Nginx filebeat+logstash+Elasticsearch+kibana实现nginx日志图形化展示

    filebeat+logstash+Elasticsearch+kibana实现nginx日志图形化展示   by:授客  QQ:1033553122   测试环境 Win7 64 CentOS-7- ...

  3. 通过filebeat、logstash、rsyslog采集nginx日志的几种方式

    由于nginx功能强大,性能突出,越来越多的web应用采用nginx作为http和反向代理的web服务器.而nginx的访问日志不管是做用户行为分析还是安全分析都是非常重要的数据源之一.如何有效便捷的 ...

  4. Logstash使用grok过滤nginx日志(二)

    在生产环境中,nginx日志格式往往使用的是自定义的格式,我们需要把logstash中的message结构化后再存储,方便kibana的搜索和统计,因此需要对message进行解析. 本文采用grok ...

  5. elasticsearch+logstash+redis+kibana 实时分析nginx日志

    1. 部署环境 2. 架构拓扑 3. nginx安装 安装在192.168.176.128服务器上 这里安装就简单粗暴了直接yum安装nginx [root@manager ~]# yum -y in ...

  6. 使用Elasticsearch、Logstash、Kibana与Redis(作为缓冲区)对Nginx日志进行收集(转)

    摘要 使用Elasticsearch.Logstash.Kibana与Redis(作为缓冲区)对Nginx日志进行收集 版本 elasticsearch版本: elasticsearch-2.2.0 ...

  7. 利用ELK分析Nginx日志生产实战(高清多图)

    本文以api.mingongge.com.cn域名为测试对象进行统计,日志为crm.mingongge.com.cn和risk.mingongge.com.cn请求之和(此二者域名不具生产换环境统计意 ...

  8. 利用ELK分析Nginx日志

    本文以api.mingongge.com.cn域名为测试对象进行统计,日志为crm.mingongge.com.cn和risk.mingongge.com.cn请求之和(此二者域名不具生产换环境统计意 ...

  9. ELK - nginx 日志分析及绘图

    1. 前言 先上一张整体的效果图: 上面这张图就是通过 ELK 分析 nginx 日志所得到的数据,通过 kibana 的功能展示出来的效果图.是不是这样对日志做了解析,想要知道的数据一目了然.接下来 ...

随机推荐

  1. ASP.Net中应用百度编辑器(UEditor)上传图片和上传附件失败-解决方案

    第一步: 第二步: 第三步: 第四步:

  2. T4模版

    T4模版 这讲适合所有的MVC程序 很荣幸,我们的系统有了体验的地址了.演示地址 之前我们发布了一个简单的代码生成器,其原理就是读取数据库的表结构,生成文本的一个方式来生成代码! 为了替代重复的劳动, ...

  3. C程序设计语言(第二版)习题:第一章

    第一章虽然感觉不像是个习题.但是我还是认真去做,去想,仅此而已! 练习 1-1 Run the "hello, world" program on your system. Exp ...

  4. 上传文件大小限制,webconfig和IIS配置大文件上传

    IIS6下上传大文件没有问题,但是迁移到IIS7下面,上传大文件时,出现HTTP 404错误. IIS配置上传大小,webconfig <!-- 配置允许上传大小 --><httpR ...

  5. web前端学习笔记

    web前端学习笔记(CSS盒子的定位) 相对定位 使用相对定位的盒子的位置常以标准流的排版方式为基础,然后使盒子相对于它在原本的标准位置偏移指定的距离.相对定位的盒子仍在标准流中,它后面的盒子仍以标准 ...

  6. 讲讲Linq to SQL映射(基础篇)

    讲讲Linq to SQL映射(基础篇) 这篇主要讲Linq to  SQL基于属性的映射.即映射数据库,映射表,映射列,映射关系,映射存储过程, 映射函数.然而创建这种映射有三种方法,他们分别是OR ...

  7. 【NET】WebBrowser执行脚本以及一般操作代码

    public class WebBrowserAssistant { System.Windows.Forms.WebBrowser wb; public WebBrowserAssistant(Sy ...

  8. MongoDB服务安装

    0.解压压缩包:D:\lab\mongodb 1.创建目录: D:\lab\mongodb\data D:\lab\mongodb\data\db D:\lab\mongodb\data\log D: ...

  9. jquery设置元素的readonly和disabled【转】

    Jquery的api中提供了对元素应用disabled和readonly属性的方法,在这里记录下.如下: 1.readonly    $('input').attr("readonly&qu ...

  10. Python Redis 数据复制.

    1 > 下载Python操作Redis的客户端 https://pypi.python.org/pypi/redis/2.7.6 下载完成后,参考该网站相关命令,执行安装. 2 > 下载 ...