logstash接收syslog并根据特定格式输出到文件

本文介绍如何使用Logstash接收syslog消息,然后根据特定的格式将其输出到文件。具体例子中,展示了syslog日志的详细结构,并提及了Logstash配置文件的内容更新过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 收到syslog的一条信息格式如下:

date=2020-09-24 time=10:39:36 devname=XX_WSZF_FG1 devid=FGT5HD3915804298 logid=0419016384 type=utm subtype=ips eventtype=signature level=alert vd="root" severity=high srcip=61.xxx.127.82 srccountry="China" dstip=xxx.xxx.xxx.148 srcintf="port9" dstintf="port10" policyid=137 sessionid=483136267 action=detected proto=6 service=service-8111 attack="Apache.Optionsbleed.Scanner" srcport=30546 dstport=8111 hostname="xx.xxx.xx" direction=outgoing attackid=44633 profile="default" ref="http://www.xxxx.com/ids/VID44633" incidentserialno=1441570553 msg="applications3: Apache.Optionsbleed.Scanner," crscore=30 crlevel=high

 

  • logstash新增配置文件内容如下
input {
		 syslog{
        host => "xxx.xxx.xxx.188"
### Logstash.conf 文件格式及配置示例 Logstash 是一个开源的数据收集引擎,支持动态地从不同数据源采集数据将其传输到指定的目标存储中。其核心功能依赖于配置文件 `logstash.conf` 来定义输入、过滤器和输出。 #### 配置文件结构 Logstash 的配置文件由三个主要部分组成:`input`, `filter`, 和 `output`。每一部分的功能如下: 1. **Input**: 定义数据的来源。可以是从文件读取、网络监听或其他方式获取数据。 2. **Filter**: 对接收到的数据进行处理和转换。常见的操作包括解析日志字段、删除无用字段等。 3. **Output**: 将处理后的数据发送到目标位置,比如 Elasticsearch 或其他数据库。 以下是各部分的具体说明以及一个完整的配置示例[^2]。 --- #### 输入 (Input) 输入插件用于接收来自各种来源的日志或事件流。常用的输入插件有 `file`, `beats`, `syslog`, `tcp`, `udp` 等。 ```plaintext input { file { path => "/data/nginx/logs/access.log" start_position => "beginning" } } ``` 在此示例中,`file` 插件被用来监控 `/data/nginx/logs/access.log` 路径中的新内容,从头开始读取文件的内容。 --- #### 过滤器 (Filter) 过滤器插件负责对原始数据进行加工和清洗。例如,可以通过正则表达式提取特定字段或将时间戳标准化。 ```plaintext filter { mutate { add_field => { "[fields][path]" => "%{[path]}" } add_field => { "[message]" => "%{[message]}" } } grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } date { match => [ "timestamp", "yyyy-MM-dd HH:mm:ss" ] target => "@timestamp" } } ``` 在这个例子中: - 使用 `mutate` 添加自定义字段; - 利用 `grok` 解析 Apache 日志格式; - 设置日期解析规则以确保时间戳一致性[^2]。 --- #### 输出 (Output) 最后一步是指定如何导出经过处理的数据。Elasticsearch 是最常见的目的地之一,但也支持 Kafka, Redis, MySQL 等多种选项。 ```plaintext output { elasticsearch { hosts => ["http://192.168.153.7:9200"] index => "test-logstash-%{+YYYY.MM.dd}" } stdout { codec => rubydebug } } ``` 此片段展示了向远程 Elasticsearch 实例写入索引的同时,在控制台打印调试信息。 --- ### 完整配置示例 下面是一个综合性的 `logstash.conf` 示例,涵盖了输入、过滤和输出三大部分: ```plaintext input { beats { port => 5044 } } filter { if [type] == "nginx-access" { grok { match => { "message" => '%{IPORHOST:http_host} %{USER:remote_user} \[%{HTTPDATE:time_local}\] "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:http_version})?|-)" %{NUMBER:response:int} (?:%{NUMBER:bytes:int}|-) "(?:"(?:%{URI:referrer})?"|%{"(?<agent>[^"]+)")"' } } geoip { source => "client_ip" } } } output { elasticsearch { hosts => ["http://localhost:9200"] index => "nginx_logs_%{+YYYY.MM.dd}" } kafka { bootstrap_servers => "broker1:9092,broker2:9092" topic_id => "processed_logs" } } ``` 该脚本实现了以下功能: - 接收 Filebeat 发送过来的数据; - 提取 Nginx 访问日志的关键字段; - 增加地理位置信息; - 同步至本地 Elasticsearch 推送副本给 Kafka 主题[^2]。 --- ### 注意事项 当管理多个配置文件时(如位于 `/etc/logstash/conf.d/`),需注意每份单独的 `.conf` 应具备独立逻辑且不冲突[^1]。启动服务前可通过命令验证语法正确性: ```bash sudo /opt/logstash/bin/logstash --config.test_and_exit -f /etc/logstash/conf.d/ ``` 如果一切正常,则会显示成功消息;反之提示错误详情以便调整设置[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值