日志收集Day006

1.logstash的多分支案例:

input { 
  beats {
    port => 8888
    type => "beats"
  }

  tcp {
    port => 9999
    type => "tcp"
  }

  http {
    type => "http"
  }
} 


filter {
  if [type] == "beats" {
      grok {
         match => { "message" => "%{HTTPD_COMBINEDLOG}" }
         remove_field => [ "agent","log","input","host","ecs","tags" ]
      }

      geoip {
         source => "clientip"
         add_field => {"custom-type" => "thiis-beats"}
      }
      
      date {
          match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
      }
  } else if [type] == "tcp" {
     grok {
         # 指定加载pattern匹配模式的目录,可以是相对路径,也可以是绝对路径
         patterns_dir => ["/root/config/06-patterns"]
         # 基于指定字段进行匹配
         match => { "message" => "%{JIYU:jiyu}%{YEAR:year}"}
         add_field => {"custom-type" => "this-tcp"}
    }
  }else {
    mutate {
       add_field => { 
           "custom-type" => "thisis-http"
       } 
    }
  }

}

output { 
 stdout {} 
  
 #  elasticsearch {
 #    hosts => ["http://localhost:9200"]
 #    index => "AA"
 #  }
}

2.output的多分支案例

将上个例子output如下修改,即可实现多分支输出

output {
  if [type] == "beats" {
    elasticsearch {
      hosts => ["http://localhost:9200"]
      index => "aa"
    }
  } else if [type] == "tcp" {
    elasticsearch {
      hosts => ["http://localhost:9200"]
      index => "bb"
    }
  } else {
    elasticsearch {
      hosts => ["http://localhost:9200"]
      index => "cc"
    }
  }
}

3.filebeat和logstash多实例

运行多个实例时,需要指定--path.data=一个不存在的文件,但是这种方式会消耗更多资源,最好的办法是使用多个pipeline。

4.pipeline

1.修改pipline的配置文件:vim /app/softwares/logstash-7.17.5/config/pipelines.yml

增加如下配置:

- pipeline.id: test-pipeline-beats
  path.config: "/root/config07-beats-pipeline-es.conf"
- pipeline.id: test-pipeline-tcp
  path.config: "/root/config07-tcp-pipeline-es.conf"
- pipeline.id: test-pipeline-http
  path.config: "/root/config07-http-pipeline-es.conf"

2.将原先多分支案例拆分成多个conf文件

3.启动logstash实例  logstash
 

5.logstash的useragent过滤器

logstash配置

useragent模块要求数据源必须为json格式

input { 
  beats {
    port => 8888
  }
} 


filter {
   mutate {
      remove_field => [ "agent","log","input","host","ecs","tags" ]
   }

  geoip {
     source => "clientip"
  }

  date {
      match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
      timezone => "Asia/Shanghai"
  }

  # 用于分析客户端设备类型的插件
  useragent {
    # 指定基于哪个字段分析设备
    source => "http_user_agent"
    # 指定将解析的数据放在哪个字段,若不指定,则默认放在顶级字段中
    target => "lxc-log"
  }

}

output { 
# stdout {} 
  
 elasticsearch {
   hosts => ["http://localhost:9200"]
   index => "lxc-logstash-nginx-useragent"
 }
}

 2.filebeat配置

filebeat.inputs:
- type: log
  paths:
  - /var/log/nginx/access.log
  json:
    keys_under_root: true
    add_error_key: true
    overwrite_keys: true

# 将数据输出到logstash中
output.logstash:
   # 指定logstash的主机和端口
  hosts: ["10.0.0.101:8888"]

3.采集之后便可以在kibana创建仪表板(可以先添加到Visualize 库,再添加到仪表板)

4.源日志参考:

{"@timestamp":"2023-04-06T16:17:43+08:00","host":"10.0.0.103","clientip":"110.110.110.110","SendBytes":615,"responsetime":0.000,"upstreamtime":"-","upstreamhost":"-","http_host":"10.0.0.103","uri":"/index.html","domain":"10.0.0.103","xff":"-","referer":"-","tcp_xff":"-","http_user_agent":"curl/7.29.0","status":"200"}

6.mutate插件补充(filter的一个插件)

#第一个和第二个对message字段进行拆分,添加到顶级字段 
mutate {
      # 将message字段使用"|"进行切分
      split => { "message" => "|" }
   }
   mutate {
     add_field => {
        userid => "%{[message][1]}"
        verb => "%{[message][2]}"
        svip => "%{[message][3]}"
        price => "%{[message][4]}"
     }
   }
  #重命名字段
   mutate {
     rename => {
        "verb" => "action"
     }
   }
 #设置数据类型(详见官网)
   mutate {
     convert => {
       "userid" => "integer"
       "svip" => "boolean"
       "price" => "float"
     }
   }

源日志参考:

INFO 2025-01-25 16:24:39 [com.generate_log] - DAU|7014|浏览页面|1|28542.78 
INFO 2025-01-25 16:24:42 [com.generate_log] - DAU|682|评论商品|1|24244.89 
INFO 2025-01-25 16:24:43 [com.generate_log] - DAU|1027|使用优惠券|0|15901.5 

在 Spring Cloud 生态系统中,日志收集与展示模块通常结合了多种开源工具来实现高效的日志管理。常见的方案包括使用 **ELK(Elasticsearch、Logstash、Kibana)** 和 **Kafka** 构建分布式日志收集和分析平台。 ### 日志收集 Spring Cloud 本身并没有提供原生的日志收集组件,而是通过集成外部工具来完成这一任务。其中 Logstash 是常用的日志采集引擎,它支持从多种来源(如 TCP、文件、消息队列等)收集日志,并将数据发送到 Elasticsearch 进行存储和索引[^4]。例如,Logstash 的配置可以监听特定端口接收日志: ```conf input { tcp { mode => "server" host => "0.0.0.0" port => 9650 codec => json_lines } } ``` 此外,为了应对高并发场景下的日志传输问题,Kafka 常被用作中间件来缓冲日志数据[^3]。Spring Cloud Stream 提供了对 Kafka 的绑定支持,使得微服务可以直接将日志写入 Kafka 主题,再由 Logstash 消费这些日志进行处理。 ### 日志展示 日志的展示主要依赖于 Kibana,它是 ELK 堆栈的一部分,提供了强大的可视化界面,允许用户查询、过滤和分析存储在 Elasticsearch 中的日志数据。Kibana 支持根据字段(如日志级别、时间戳、服务名称等)进行筛选和聚合,从而帮助开发者快速定位问题。例如,可以通过自定义 Grok 表达式提取日志中的结构化信息: ```conf filter { grok { match => [ "message", "(?<customer_time>%{YEAR}%{MONTHNUM}%{MONTHDAY}\s+%{TIME})" ] } } ``` 这种机制使得日志可以按需解析并以更清晰的方式呈现在 Kibana 界面中[^2]。 ### 日志管理模块设计 在实际应用中,随着微服务数量的增加以及部署节点的分散,传统的日志查看方式已经无法满足需求。因此,构建一个统一的日志管理平台变得尤为重要。ELK + Kafka 的组合能够很好地应对这一挑战,不仅实现了日志的集中化存储,还提供了实时搜索和分析的能力[^3]。同时,Spring Cloud Stream 的抽象封装也简化了与消息中间件的集成过程,进一步提升了系统的灵活性和可维护性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值