filebeat + redis +ELK 日志集成笔记

1 篇文章 0 订阅
1 篇文章 0 订阅

filebeat + redis +ELK

好久没有写博客了,看了一下上一篇的博客还是2017年的,写的东西都是基础的教学,感觉网上一搜一大把,而且写的比我好的千千万。所以打算以后写不写教学类的东西(写一篇好的教学类的博客真的很难)
最近稍微的了空,而且项目上有程序对日志查询这块有需求,就搭建了一套ELK日志系统。
选型,介绍什么的就不说了。这篇文章是我自己的笔记,主要是记录一些命令和一些问题的解决方法,而不是搭建教程,可以当作一个问题排查的地方。

docker 安装 elk

  • 创建网络
docker network create --subnet=172.25.0.0/16 my-docker-net
  • 安装es
docker run -d -p 9200:9200 --name=es --network=my-docker-net --ip=172.25.0.2 elasticsearch:5.6.13
  • 修改
    /usr/share/elasticsearch/config/elasticsearch.yml 解决 es-head 容器连不上es
echo -e 'http.cors.enabled: true\nhttp.cors.allow-origin: "*"' >> elasticsearch.yml
  • 安装 es-head
docker run -d -p 9100:9100 --name=es --network=my-docker-net --ip=172.25.0.3 mobz/elasticsearch-head:5
  • 安装redis
docker run -d -p 6379:6379 --name=redis --network=my-docker-net --ip=172.25.0.4 redis:latest
  • 安装kibana
docker run -d -p 5601:5601 --name=kibana --network=my-docker-net --ip=172.25.0.5 kibana:6.5.0

修改配置文件 config/kibana.yml

server.host: "0.0.0.0"
#es 地址
elasticsearch.url: http://172.25.0.2:9200

logstash 和 filebeat 是直接运行在物理机上

grok 和filebeat 配置问题

  1. filebeat 配置多行日志合并,如java异常堆栈信息,在filebeat.yml上配置
    官方配置文档
filebeat.inputs:
- type: log
  # tags 可以和 logstash 配置匹配上
  tags: ["debug"]
  multiline:
   # 配置分割前缀
    pattern: '^\|\-'
    negate: true
    match: after
    timeout: 10s
 # 下面这个不需要复制
  fields:                               
    type: test1
    host: 161
  # 忽略多长时间内变化的文件
  ignore_older: 1h  

redis配置

output.redis:
   hosts: ["127.0.0.1"]
   port: 6379
   key: "java-log"
   db: 1
  1. grok filter 配置 这块是难点
    校验正则的地址 (需要翻墙)
    一些别人写好的正则
  2. logstash配置文件
input {
    tcp {
    ##host:port就是上面appender中的 destination,这里其实把logstash作为服务,开启9300端口接收logback发出的消息
        host => "127.0.0.1"
        port => 9300
        mode => "server"
        tags => ["tags"]
        codec => json_lines
    }
    
    redis {
        data_type => "list"
        host => "127.0.0.1"
        db => "1"
        port => "6379"
        key => "java-log"
        #password => "123456"
    }

}
filter {
  grok {
    # 正则文件存放目录 文件名叫什么无所谓
    patterns_dir => "./patterns"
    match => { "message" => "%{JAVA_NORMAL_LOG}" }
    # 移除某些字段
    remove_field => "message"
  }
  mutate {
    rename => { "[host][name]" => "host" }
  }
}
output {
    # 控制台输出debug
    stdout { codec => rubydebug }
    #输出到es
    if "info" in [tags] {
	    elasticsearch {
          hosts => "127.0.0.1:9200"
          index => "java_info" 
        }
    } else if "debug" in [tags] {
	    elasticsearch {
          hosts => "127.0.0.1:9200"
          index => "java_debug" 
        }
    } else {
       elasticsearch {
          hosts => "127.0.0.1:9200"
          index => "java_normal" 
        }
    }

}

  1. 匹配日志匹配 logback 配置
|- %-12(%d{yyyy-MM-dd HH:mm:ss}) %-5level [%thread] %c : %L %msg%n

正则表达式 grok 支持将正则定义在一个目录中,文件名什么无所谓。将如下正则表达式贴到对应文件中

MYSELFTIMESTAMP 20%{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{HOUR}:?%{MINUTE}(?::?%{SECOND})
JAVACLASS (?:[a-zA-Z$_][a-zA-Z$_0-9]*\.)*[a-zA-Z$_][a-zA-Z$_0-9]*
MATCH_ANY [\s\S]*
JAVA_LOG \|\- %{MYSELFTIMESTAMP:timestamp}(\s*)%{LOGLEVEL:level}(\s*)\[%{MATCH_ANY:thread}\](\s*)%{JAVACLASS:class}([\s\S]*)\: %{NUMBER:line} %{MATCH_ANY:logmessage}

tips

  • 多tag配置 将不同类型的日志存放到不同的地方
    设置tag(tag的作用是可以根据判断条件给不同类型的日志分配不同的索引,或者推送到不同的地方)
    logstash
filter { 
    if "json" in [tags] { 
        grok { match => ["message", %{COMBINEDAPACHELOG}] }
    } 
    
} 
output { 
    if "json" in [tags] { 
        nagios_nsca { nagios_status => "1" } 
    } else { 
        elasticsearch { } 
    } 
}

filebeat

filebeat.inputs:
- type: log
  . . .
  tags: ["json"]

elasticsearch-head 基本操作

  • 删除数据
POST {index}/_delete_by_query
{
 "query": { 
    "match": { "message": "some message" } 
 }
}
  • 查询数据
GET {index}/_search
{
 "query": { 
    "match": { "message": "some message" } 
 }
}

命令大全

  • logstash 启动 --config.reload.automatic 动态刷新配置 可选参数
./lagstash -f configfile.conf --config.reload.automatic
  • filebeat 启动
./filebeat -e -c filebeat.yml
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值