Filebeat Logstash 安装配置

1 安装及配置filebeat

1.1 安装

文件filebeat-7.15.2-linux-x86_64.tar.gz下载至/opt/src目录

[root@neiwang ~]# cd /opt/src/
[root@neiwang src]# tar -zxvf filebeat-7.15.2-linux-x86_64.tar.gz -C /opt/
[root@neiwang ~]# cd /opt/
[root@neiwang opt]# mv filebeat-7.15.2-linux-x86_64/ filebeat-7.15.2/

1.2 配置

[root@neiwang ~]# cd /opt/filebeat-7.15.2
[root@neiwang config]# vim filebeat-demo.yml

filebeat-demo.yml添加如下配置

#用于缓冲要发布的事件的内部队列配置
queue:
  #内存队列
  mem:
    #内存队列的最大缓冲事件数
    events: 2048
    #发布所需的最小事件数,设置为0则发布事件直接输出,无需等待
    flush.min_events: 1536
    #达到flush.min_events的最大等待事件,设置为0则无需等待
    flush.timeout: 1s
#设置可以同时执行的最大CPU数。默认值为系统中可用的逻辑CPU的数量
max_procs: 1

filebeat.inputs:
#日志输入
- type: log
  #配置生效
  enabled: true
  #采集日志路径
  paths:
    - /data/ecms-8030.log
    - /data/ecms-8031.log
  #包含的正则表达式列表,只采集包含ERROR的记录
  include_lines: ['ERROR']
  #50k 每个收割机获取文件时使用的缓冲区大小
  harvester_buffer_size: 51200
  #10M 单个日志消息的最大字节数,超出部分丢弃
  max_bytes: 10485760
  #扫描频率,默认10秒
  scan_frequency: 10s
  #匹配所有以 [ 开头的行,并且后面非以 [ 开头的行将被追加到匹配的那一行。
  #multiline.pattern: '^\['
  #匹配所有以 [xxxx-xx-xx 开头的行,并且后面非以 [xxxx-xx-xx 开头的行将被追加到匹配的那一行。
  multiline.pattern: '^\[[0-9]{4}-[0-9]{2}-[0-9]{2}'
  multiline.negate: true
  multiline.match: after
  #属性中添加附加信息的可选字段,区分数据来源
  fields:
    type: ecms
    env: prod
  #将自定义字段作为顶级字段存储到到输出文档中,默认false
  fields_under_root: true

#日志输入
- type: log
  #配置生效
  enabled: true
  #采集日志路径
  paths:
    - /opt/logstash-7.15.2/logs/logstash-plain.log
  #包含的正则表达式列表,只采集包含ERROR的记录
  include_lines: ['ERROR']
  #50k 每个收割机获取文件时使用的缓冲区大小
  harvester_buffer_size: 51200
  #10M 单个日志消息的最大字节数,超出部分丢弃
  max_bytes: 10485760
  #扫描频率,默认10秒
  scan_frequency: 10s
  #属性中添加附加信息的可选字段,区分数据来源
  fields:
    type: logstash
    env: prod
  #将自定义字段作为顶级字段存储到到输出文档中,默认false
  fields_under_root: true

output.logstash:
  hosts: ["127.0.0.1:5044"]

1.3 启动

[root@neiwang ~]# /opt/filebeat-7.15.2/filebeat -e -c /opt/filebeat-7.15.2/filebeat-demo.yml

2 安装及配置logstash

2.1 安装

文件logstash-7.15.2-linux-x86_64.tar.gz下载至/opt/src目录

[root@neiwang ~]# cd /opt/src/
[root@neiwang src]# tar -zxvf logstash-7.15.2-linux-x86_64.tar.gz -C /opt/

2.2 配置

处理Filebeat发来的数据

[root@neiwang ~]# cd /opt/logstash-7.15.2/config/
[root@neiwang config]# vim logstash-demo.conf

logstash-demo.conf添加如下配置

input {
  beats {
    port => "5044"
  }
}

filter {
  if [type] == "ecms" {
    #Grok正则捕获,从非结构化数据中派生出结构
    grok {
      match => [
        "message", "\[%{TIMESTAMP_ISO8601:log_date}\] \[%{DATA:thread}\] %{LOGLEVEL:log_level} %{DATA:class} \- %{GREEDYDATA:log_msg}"
      ]
    }
    
    #预警-数值统计
    metrics {
      #定义metrics计数器数据保存的字段名
      meter => [ "ecms_event_%{log_level}" ]
      #给该metrics添加tag标签,用于区分metrics
      add_tag => [ "ecms_metric" ]
      #每隔5分钟统计一次
      flush_interval => 300
      #每隔5分钟清空计数器
      clear_interval => 300
    }
  
    if "ecms_metric" in [tags] {
      ruby {
        #5分钟内异常日志数量大于等于1报警
        path => "/etc/logstash/warning.rb"
        script_params => { "quantity" => 1 }
      }
    }

    mutate {
      remove_field => ["message", "log_msg"]
    }
  }

  if [type] == "logstash" {
    #预警-数值统计
    metrics {
      #定义metrics计数器数据保存的字段名
      meter => [ "logstash_event_error" ]
      #给该metrics添加tag标签,用于区分metrics
      add_tag => [ "logstash_metric" ]
      #每隔5分钟统计一次
      flush_interval => 300
      #每隔5分钟(flush_interval + 1秒)清空计数器
      clear_interval => 301
      #10秒内的message数据才统计,避免延迟
      ignore_older_than => 10
    }
  
    if "logstash_metric" in [tags] {
      ruby {
        #如果日志级别是ERROR的日志count小于1条,就忽略此事件(即不发送任何消息)。
        code => 'event.cancel if event.get("[logstash_event_error][count]") < 1'
      }
    }
  }
}

output {
  if "ecms_metric" in [tags] {
    email {
      port           =>    "587"
      address        =>    "smtp-n.global-mail.cn"
      username       =>    "from@qq.com"
      password       =>    "123456"
      use_tls        =>    "true"
      from           =>    "from@qq.com"
      subject        =>    "万古云签日志报警-PROD"
      to             =>    "to@qq.com"
      via            =>    "smtp"
      body           =>    "预警:万古云签存在ERROR日志,请注意排查!"
    }
  }

  if "logstash_metric" in [tags] {
    email {
      port           =>    "587"
      address        =>    "smtp-n.global-mail.cn"
      username       =>    "from@qq.com"
      password       =>    "123456"
      use_tls        =>    "true"
      from           =>    "from@qq.com"
      subject        =>    "Logstash日志报警-PROD"
      to             =>    "to@qq.com"
      via            =>    "smtp"
      body           =>    "预警:Logstash存在ERROR日志,请注意排查!"
    }
  }
  
  if [type] == "ecms" {
    #输出到Redis
    redis {
      data_type => "list"
      key => "logstash-%{[type]}-%{[env]}-%{+yyyy.MM.dd}"
      host => "127.0.0.1"
      port => 6379
      db => 0
    }
  }

  if [type] == "logstash" {
    #输出到Redis
    redis {
      data_type => "list"
      key => "logstash-%{[type]}-%{[env]}-%{+yyyy.MM.dd}"
      host => "127.0.0.1"
      port => 6379
      db => 0
    }
  }
}

warning.rb

def register(params)
    @limited_quantity = params["quantity"]
end

def filter(event)
    if event.get("[ecms_event_ERROR][count]") >= @limited_quantity
        return [event]
    else
        return [] # return empty array to cancel event
    end
end

2.3 启动

[root@neiwang ~]# /opt/logstash-7.15.2/bin/logstash -f /opt/logstash-7.15.2/config/logstash-demo.conf

2.4 logback日志格式

<!-- 日志输出格式 -->
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<property name="log.pattern" value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %-5level %logger{50} - %msg%n"/>

2.5 grok调试

  1. 安装并启动elasticsearch&kibana
  2. 访问grok调试地址
    http://115.28.77.238:5601/app/dev_tools#/grokdebugger

3 supervisor长期运行

/opt/supervisor/conf/conf.d目录下增加配置

  • logstash配置
[program:logstash]
user=root
directory=/opt/logstash-7.15.2
command=/opt/logstash-7.15.2/bin/logstash -f /opt/logstash-7.15.2/config/logstash-demo.conf
autostart=true
autorestart=true
  • filebeat配置
[program:filebeat]
user=root
directory=/opt/filebeat-7.15.2
command=/opt/filebeat-7.15.2/filebeat -c /opt/filebeat-7.15.2/filebeat-demo.yml
autostart=true
autorestart=true
  • 常用命令
#加载配置
supervisorctl -c /opt/supervisor/conf/supervisord.conf update
#全部启动
supervisorctl -c /opt/supervisor/conf/supervisord.conf start all
#指定关闭
supervisorctl -c /opt/supervisor/conf/supervisord.conf stop filebeat
supervisorctl -c /opt/supervisor/conf/supervisord.conf stop logstash
supervisorctl -c /opt/supervisor/conf/supervisord.conf stop all
#指定启动
supervisorctl -c /opt/supervisor/conf/supervisord.conf start logstash
supervisorctl -c /opt/supervisor/conf/supervisord.conf start filebeat
#指定重启
supervisorctl -c /opt/supervisor/conf/supervisord.conf restart logstash
#查看状态
supervisorctl -c /opt/supervisor/conf/supervisord.conf status

4 文献

elastic stack:https://www.elastic.co/cn/elastic-stack/
beats:https://www.elastic.co/cn/beats/
Filebeat Reference:https://www.elastic.co/guide/en/beats/filebeat/current/index.html
logstash:https://www.elastic.co/cn/logstash/
Logstash Reference:https://www.elastic.co/guide/en/logstash/current/index.html
grok-patterns:https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns
Logstash 实用介绍:https://www.elastic.co/cn/blog/a-practical-introduction-to-logstash

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容