logstash 使用和搭建

官方介绍:Logstash is an open source data collection engine with real-time pipelining capabilities。简单来说logstash就是一根具备实时数据传输能力的管道,负责将数据信息从管道的输入端传输到管道的输出端;与此同时这根管道还可以让你根据自己的需求在中间加上滤网,Logstash提供里很多功能强大的滤网以满足你的各种应用场景。

logstash 官方文档
https://www.elastic.co/guide/en/logstash/current/getting-started-with-logstash.html

1.安装

logstash 依赖JDK8
下载压缩包 https://www.elastic.co/downloads/logstash
下载后,直接解压就可以

2.配置

logstash 主要的配置,就是输入 input 和 输出output,还有 filter

input{
   http{
        host=> "0.0.0.0"
        port=> 8080
        id=> "luoyang"
   }
}

output{
kafka {
    bootstrap_servers => '192.168.23.223:19092,192.168.23.224:19092,192.168.23.225:19092'
    topic_id => 'smkAppLog'
 # codec => plain
 ##  对消息进行格式化
 codec => line{format=>"%{message}" }
  }

## 输出到文件里面
  file{
                path => "/home/smkapp/my.log"
        }
}

logstash 的http_input插件,
默认:
codec => “plain”
additional_codecs =>{“application/json”=>“json”}

在这种 情况下,使用HTTP 方式向 logstash 插件里面发送数据,
如果请求头里面的 content-type = application/json 这种情况下,logstash会默认的把JSON 数据解析出来,放在最外层的JSON数据里面

{
    "@version": "1",
    "headers": {
        "http_accept": null,
        "request_method": "POST",
        "http_user_agent": "okhttp/3.8.1",
        "x_real_ip": "192.168.160.131",
        "connection": "close",
        "request_path": "/smk_data/",
        "x_forwarded_for": "192.168.160.131",
        "http_host": "192.168.23.211:80",
        "accept_encoding": "gzip",
        "content_type": "application/json;charset=utf-8",
        "content_length": "266",
        "http_version": "HTTP/1.0"
    },
    "host": "192.168.23.211",
    "@timestamp": "2018-12-25T01:16:45.736Z",
    "event_type": "click",  // 发送的数据
    "data_sender": "android",// 发送的数据
    "device_id": "00000000-2242-9cf3-0000-0000138614f1",// 发送的数据
    "element_id": "31lf",// 发送的数据
    "element_type": "advert",// 发送的数据
    "current_page_name": "B201812201509559344",// 发送的数据
    "business_id": "Y31|8",// 发送的数据
    "platform": "android",// 发送的数据
    "element_content": "X201812211338438973"// 发送的数据
}

如果 content-type 不是 application/json

{
    "@version": "1",
    "headers": {
        "http_accept": null,
        "request_method": "POST",
        "http_user_agent": "okhttp/3.8.1",
        "x_real_ip": "192.168.160.131",
        "connection": "close",
        "request_path": "/smk_data/",
        "x_forwarded_for": "192.168.160.131",
        "http_host": "192.168.23.211:80",
        "accept_encoding": "gzip",
        "content_type": "application/json;charset=utf-8",
        "content_length": "266",
        "http_version": "HTTP/1.0"
    },
    "host": "192.168.23.211",
    "@timestamp": "2018-12-25T01:16:45.736Z",
    "message": "{\"event_type\":\"click\",\"data_sender\":\"android\",\"device_id\":\"00000000-2242-9cf3-0000-0000138614f1\",\"element_id\":\"31lf\",\"element_type\":\"advert\",\"current_page_name\":\"B201812201509559344\",\"business_id\":\"Y31|8\",\"platform\":\"android\",\"element_content\":\"X201812211338438973\"}" // 发送的数据
}

那么发送的数据就是这样的,会有一个message 字段。

因为我个人习惯于无论发送方使用什么样的 请求头,接收到的数据格式都保持一致,所有,我去掉默认的 codec

input{
   http{
        host=> "0.0.0.0"
        port=> 6000
        id=> "fff"
        additional_codecs =>{}  ##去除默认添加的codec
        
   }
}

output{
     kafka {
            bootstrap_servers => '192.168.23.223:19092,192.168.23.224:19092,192.168.23.225:19092'
            topic_id => 'smkAppLog'
               
            codec => line{format=>"%{message}" }
            }

     file {
        path=>'/home/smkapp/my.log'
#       codec => line{format=>"%{message}"}
      }

}

提供给 H5使用的话,就会出现 跨域问题,解决办法

input{
   http{
        host=> "0.0.0.0"
        port=> 6000
        id=> "luoyang"
        additional_codecs =>{}
        #codec => json
        #解决跨域问题
        response_headers => {"Content-Type"=>"text/plain"}
        response_headers => {"Access-Control-Allow-Origin"=>"*"}
        response_headers => {"Access-Control-Max-Age"=>"86400"}
   }
}

output{
     kafka {
            bootstrap_servers => '192.168.23.223:19092,192.168.23.224:19092,192.168.23.225:19092'
            topic_id => 'smkAppLog'

            codec => line{format=>"%{message}" }
            }

     file {
        path=>'/home/smkapp/my.log'
#       codec => line{format=>"%{message}"}
      }

}

logstash 提供了一个管道,快速把数据导入到其他的中间件里面,比如ES,kafka,等
然后今天有提到一个需求,需要使用logstash 提供2个http 接口对外,然后分别分发到 同一个kafka里面,不同的topic.

input{
   http{
       ##  logstash 固有配置,可以自定一个type,输出可以做判断
        type => "type_smkapplog"
        host=> "0.0.0.0"
        port=> 6000
        ## 同一个插件,需要使用2次,ID 一定要不一样
        id=> "http_smkapplog"
        additional_codecs =>{}
        #codec => json
        response_headers => {"Content-Type"=>"text/plain"}
        response_headers => {"Access-Control-Allow-Origin"=>"*"}
        response_headers => {"Access-Control-Max-Age"=>"86400"}
   }

  http{
  ##  logstash 固有配置,可以自定一个type,输出可以做判断
        type => "type_smkadlog"
        host=> "0.0.0.0"
        port=> 6001
         ## 同一个插件,需要使用2次,ID 一定要不一样
        id=> "smk_ad_log"
        additional_codecs =>{}
        #codec => json
        response_headers => {"Content-Type"=>"text/plain"}
        response_headers => {"Access-Control-Allow-Origin"=>"*"}
        response_headers => {"Access-Control-Max-Age"=>"86400"}
   }
}

output{

  ##  根据type  判断消息类型,输入到指定KAFKA的指定topic
     if [type] == "type_smkapplog"{
         kafka {
                 ## 同一个插件,需要使用2次,ID 一定要不一样
                id => "output_smkapplog"
                bootstrap_servers => '192.168.23.223:19092,192.168.23.224:19092,192.168.23.225:19092'
                topic_id => 'smkAppLog'
                codec => line{format=>"%{message}" }
                }

        file {
                    id => "file_spplog"
                    path=>'/home/smkapp/applog.log'
                    #codec => line{format=>"%{message}"}
                 }
        }

     if [type] == "type_smkadlog"{
            kafka {
                    id => "output_smkadlog"
                    bootstrap_servers => '192.168.23.223:19092,192.168.23.224:19092,192.168.23.225:19092'
                    topic_id => 'smk_ad_log'
                    codec => line{format=>"%{message}" }
                 }

            file {
                    id =>"file_adlog"
                    path=>'/home/smkapp/my.log'
                    #codec => line{format=>"%{message}"}
                 }
        }
}
Logstash是一个开源的数据收集引擎,用于实时处理和转发日志和其他事件数据。它可以从多种来源(如文件、数据库、消息队列等)收集数据,并将其转换为可用于存储、分析和可视化的格式。 要独立搭建Logstash,您可以按照以下步骤进行操作: 1. 下载Logstash:首先,您需要从Elastic官方网站(https://www.elastic.co/downloads/logstash)下载适用于您的操作系统的Logstash安装包。 2. 配置Logstash:在安装Logstash之后,您需要创建一个配置文件来定义数据的输入、过滤和输出。配置文件使用简单的DSL(Domain Specific Language)语法编写,您可以根据自己的需求进行定制。 3. 定义输入:在配置文件中,您需要指定数据的输入源。Logstash支持多种输入插件,例如文件输入、网络输入、数据库输入等。根据您的需求选择适当的输入插件,并配置相关参数。 4. 定义过滤:在配置文件中,您可以定义一系列过滤器来处理输入数据。过滤器可以用于解析、转换、过滤或增强数据。Logstash提供了许多内置的过滤器插件,您可以根据需要选择并配置这些插件。 5. 定义输出:最后,在配置文件中定义数据的输出目标。Logstash支持多种输出插件,例如文件输出、数据库输出、消息队列输出等。选择适当的输出插件,并配置相关参数。 6. 启动Logstash:完成配置后,您可以使用命令行启动Logstash,并指定配置文件的路径。Logstash将开始监听输入源,并根据配置文件中的定义进行数据处理和转发。 这是一个简单的Logstash独立搭建的过程。根据您的具体需求和环境,可能还需要进行一些额外的配置和调整。建议您参考Logstash官方文档(https://www.elastic.co/guide/en/logstash/current/index.html)以获取更详细的信息和指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值