Logstash的安装配置

最近使用elk来管理网络项目的访问log,其中Elasticsearch 和 Kibana由公司系统提供,logstash需要自己搭建,项目的访问log首先发送到kafka,然后由logstash从kafka收集log发送到Elasticsearch进行分析展示。记录一下logstash的搭建配置过程。

安装

#下载并安装公共签名密钥:
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
 
 
#在目录/etc/yum.repos.d/下添加一个后缀为.repo的文件
sudo vim /etc/yum.repos.d/logstash.repo
#内容如下:
[logstash-7.x]
name=Elastic repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
 
 
 
#安装logstash
sudo yum install logstash
 
 
#或者,使用wget https://artifacts.elastic.co/downloads/logstash/logstash-7.4.0.tar.gz 直接下载

配置

使用yum安装的logstash的配置文件位于目录/etc/logstash/下面,可以在这里创建default.conf,jaas.conf, kafka.truststore.jks文件。
其中jaas.conf记录kafka的用户名、密码等信息,kafka.truststore.jks也是用于kafka的验证配置。
具体配置文件如下:

#输入:kafka的配置,这个是我们项目的kafka的参数,不同的项目的设置可能不同,根据具体的kafka配置
input {
        kafka {
                bootstrap_servers => "10.110.203.10:29091, 10.110.203.10:29092"
                #topics_pattern这个配置表示匹配所有以test-开头的topic
                topics_pattern => "test-.*"
                group_id => "test"
                decorate_events => true
                jaas_path => "/etc/logstash/jaas.conf"
                security_protocol => "SASL_SSL"
                sasl_kerberos_service_name => "kafka"
                sasl_mechanism => "SCRAM-SHA-512"
                ssl_truststore_location => "/etc/logstash/kafka.truststore.jks"
                ssl_truststore_password => "kafka-passwd"
                ssl_endpoint_identification_algorithm => ""
        }
}
 
filter {
        #message是个json的字符串(log信息主体),这个filter负责把字符串解析成json对象,并且移除之前的message字段
        json {
                source => "message"
                remove_field => ["message"]
        }
        #将user agent字符串解析为结构化数据
        useragent {
                target => "ua"
                source => "userAgent"
        }
}
#输出,elasticsearch的配置
output {
        elasticsearch {
                hosts => ["https://10.110.203.10:12000"]
                #这个index设置表示以kafka的topic作为elasticsearch的index
                index => "%{[@metadata][kafka][topic]}"
                user => "user"
                password => "password"
        }
}

将上述文件存储为/etc/logstash/default.conf, 然后使用命令sudo /usr/share/logstash/bin/logstash -f /etc/logstash/default.conf启动logstash。
另外,jaas.conf文件内容格式如下(用户名密码参照kafka安装设置的用户名密码,如果没有的话,可以不设置jaas_path,如果没有使用ssl加密的话,可以不设置ssl_truststore_location):

KafkaClient {
        org.apache.kafka.common.security.scram.ScramLoginModule required
        username="test"
        password="123456";
};

精简之后的kafka的配置如下:

#其中decorate_events会将kafka的属性写到metadata里面
kafka {
	bootstrap_servers => "10.110.203.10:29091, 10.110.203.10:29092"
    topics_pattern => "test-.*"
    group_id => "test"
    decorate_events => true
}

metadata在最后输出的结果里面的样子大概如下:

#注意这个不是我们之前配置的logstash文件输出的结果,我们之前配置的把message字段删除转换成了json对象,这个只是使用log信息为test的字符串演示一下metadata的结构
{
    "@timestamp" => 2019-10-17T07:52:25.973Z,
     "@metadata" => {
          "kafka" => {
            "consumer_group" => "logstash",
                 "partition" => 0,
                    "offset" => 9,
                 "timestamp" => 1571298744915,
                     "topic" => "test",
                       "key" => nil
        },
    },
      "@version" => "1",
      "message" => "test", 
}

假设我们不想使用kafka的topic作为elasticsearch的index,而是只想使用一部分的话,比如我们的topic都是test-开头的,如test-dev-com,test-beta-com等,我们只想使用dev,beta等作为最后的index,那么可以使用grok来进行处理,配置如下:

filter {
    #从[@metadata][kafka][topic]中提取出topic并取中间段作为[@metadata][topic],然后将elasticsearch的index配置为index => "%{[@metadata][topic]}"即可
    grok {
        match => {"[@metadata][kafka][topic]" => "(?<[@metadata][topic]>(?<=test-)(.*)(?=-com)/?)"}
  }
}

做测试的时候可以将input配置为标准输入,output配置为标准输出,这样可以更为直观的观察结果:

input {
    stdin{} 
}
output {
    stdout {codec => rubydebug { metadata => true  }}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值