虚拟化容器,大数据,DBA,中间件,监控。

ELK logstash根据不同日志来源创建索引

20 12月
作者:admin|分类:大数据

条件判断


操作符:
 比较操作符:== ,!= , < , > , <= ,>=
 正则匹配操作符:=~(匹配正则) ,!~(不匹配正则)
 成员操作符:in(包含) , not in(不包含)
 逻辑操作符:and(与),or(或), nand(非与) , xor(非或)
 一元运算符:!(取反) ,()(复合表达式) ,!()(对复合表达式结果取反)
条件判断语句:
if <表达式> {
<语句>
} else if <表达式> {
<语句>
} else {
<语句>
}

 

典型的应用场景


 根据日志来源(例如项目名称,应用名)字段写入不同索引名称
 根据日志来源(例如测试环境,生产环境)字段写入不同索引名称
 
 

 

输入插件都支持的字段


  • add_field 添加一个字段到一个事件,放到事件顶部,一般用于标记日志来源。例如属于哪个项目,哪个应用
  • tags 添加任意数量的标签,用于标记日志的其他属性,例如表明访问日志还是错误日志
  • type 为所有输入添加一个字段,例如表明日志类型

 

 

日志的来源放在不同的索引


现在要做的就是将采集日志的来源放在不同的索引里面。如果不这样配置那么在logstash采集的日志都会输出到一个索引里面,这样是不利于对后期的管理的。因为索引相当于数据库,按天命名方便清理。把同类的日志放在同一个索引里面。

下面是根据环境采集日志

[root@localhost ~]# cat /usr/local/logstash/conf.d/test.conf
input {
  file {
    path => "/var/log/nginx/*.log"
    exclude => "*.gz"
    start_position => "beginning"
    tags => "web"
    tags => "nginx"
    type => "access"
    add_field => {
      "project" => "microservice"
      "app" => "product"
 } 
}
  
  file {
    path => "/var/log/test/test.log"
    add_field => {
    "log_type" => "test"
 } 
}

  file {
    path => "/var/log/test/prod.log"
    add_field => {
    "log_type" => "prod"
  } 
 } 
}

filter {
  json {
  source => "message"
}

if [log_type] in ["test","dev"] {
  mutate { 
  add_field => { 
 "[@metadata][target_index]" => "test-%{+YYYY.MM}" 
  } 
 }
} else if [log_type] == "prod" {
  mutate { 
  add_field => { 
  "[@metadata][target_index]" => "prod-%{+YYYY.MM.dd}" 
  } 
 }
} else {
  mutate { 
  add_field => { 
  "[@metadata][target_index]" => "unknown-%{+YYYY}" 
   } 
  } 
 }
}

output {
  elasticsearch {
    hosts => ["192.168.179.102:9200"]
    index => "%{[@metadata][target_index]}"
 }
}

测试一下,生成数据

[root@localhost ~]# echo "this is test" >> /var/log/test/test.log
[root@localhost ~]# echo "this is prod" >> /var/log/test/prod.log

在浏览器上访问nginx

 可以看到根据不同的日志来源创建了不同的索引,不同的索引里面存放着不同的日志信息

 

 

浏览453 评论0
返回
目录
返回
首页
ELK Filebeat采集日志推送到Logstash ELK logstash 过滤插件:GeoIP