Skip to content
0

20. Logstash 收集阿里云sls日志

1 简介

Logstash 是一个开源的日志处理工具,用于收集、转换和发送日志数据。它可以从多个来源接收日志,如文件、数据库、消息队列等,并将其发送到不同的目标,如 Elasticsearch、Kafka、Redis 等。Logstash 提供了强大的插件系统,允许用户根据需要自定义数据处理和转换逻辑。

Logstash 相比同类型的日志采集工具,有以下优势:

  • 插件丰富:Logstash 提供了丰富的插件生态系统,支持从多种来源接收日志、对日志进行转换和处理,并将其发送到不同的目标。
  • 可扩展性:Logstash 可以根据需要进行水平扩展,以处理大规模的日志数据。
  • 配置简单:Logstash 使用简单的配置文件来定义日志采集、转换和发送的流程,无需编写复杂的代码。
  • 社区支持:Logstash 有一个活跃的社区,提供了丰富的文档、插件和支持,帮助用户解决问题并获取帮助。

2 安装

2.1 Helm 安装

本次演示安装指定版本:7.16.3。

  1. 下载 logstash 7.16.3 的 helm 包。
bash
helm pull elastic/logstash --version 7.16.3
  1. 修改 values.yaml 文件。

使用 logstash-input-sls 插件需要自行构建镜像安装 logstash-input-sls 插件。

以下是改动的配置项,实际使用中需要根据实际情况修改:

yaml
replicas: 3
logstashConfig: 
  logstash.yml: |
    http.host: 0.0.0.0
    xpack.monitoring.enabled: false
  log4j2.properties: |
    rootLogger.level = warn
logstashPipeline: 
  logstash.conf: | 
    input {
      logservice{
        endpoint => "cn-shenzhen-intranet.log.aliyuncs.com"
        access_id => "demo-access-id"
        access_key => "demo-access-key"
        project => "demo-project"
        logstore => "demo-logstore"
        consumer_group => "demo-ualc-logstash"
        consumer_name => "demo-ualc-logstash-prd-aliyun"
        position => "end"
        checkpoint_second => 30
        include_meta => true
        consumer_name_with_ip => true
      }   
    }
    filter {
      # 满足以下条件就丢弃日志
      if ([db] != "demo-db" and [cluster_id] != "demo-id") {
        drop {}
      }

      if [db] == "demo-db" {
        mutate {
          add_field => {
            "business" => "demo-business1"
          }
        }
      }
      if [cluster_id] == "demo-id" {
        mutate {
          add_field => {
            "business" => "demo-business2"
          }
        }
      }
    }
    output {
      kafka {
        bootstrap_servers => "demo-kafka-kafka-np-0.ualc-system.svc.cluster.local:9094,demo-kafka-kafka-np-1.ualc-system.svc.cluster.local:9094,demo-kafka-kafka-np-2.ualc-system.svc.cluster.local:9094"
        topic_id => "prd-aliyun-slslog"
        codec => json
        max_request_size => 10485760
        compression_type => lz4
      }
    }

image: "demo-registry.moweolong.com/library/logstash"
imageTag: "7.16.3-input-sls"
imagePullPolicy: "IfNotPresent"

logstashJavaOpts: "-Xmx6g -Xms6g"

resources:
  requests:
    cpu: "1000m"
    memory: "8Gi"
  limits:
    cpu: "4000m"
    memory: "8Gi"

volumeClaimTemplate:
  accessModes: ["ReadWriteOnce"]
  storageClassName: "demo-sc"
  resources:
    requests:
      storage: 10Gi

persistence:
  enabled: true
  • logstashConfig.log4j2.properties:logstash 日志配置文件,默认日志级别为 info。
    • 为什么要改为 warn?
      • 因为logstash-input-file插件会将处理的日志都输出到控制台,我没有找到如何配置关闭输出控制台,所以改为 warn。
  • logstash.conf:配置了阿里云 sls 输入插件和 kafka 输出插件,过滤插件在 filter 中配置,这里就根据实际使用情况修改了,有不懂的可以参考Logstash 官方文档
  1. 部署 logstash
bash
helm install -f values.yaml logstash elastic/logstash --namespace ualc-system

3 安装插件

3.1 容器内安装插件

这里演示安装 logstash-input-sls 插件。

  1. 编写 Dockerfile 安装插件。
Dockerfile
FROM logstash:7.16.3
RUN sed -i 's#https://rubygems.org#https://mirrors.tuna.tsinghua.edu.cn/rubygems/#' /usr/share/logstash/Gemfile
RUN bin/logstash-plugin install --no-verify logstash-input-sls
  1. 构建镜像
bash
sudo docker build -t demo-registry.moweolong.com/library/logstash:7.16.3-input-sls .
  1. 推送镜像
bash
sudo docker push demo-registry.moweolong.com/library/logstash:7.16.3-input-sls
  1. 查看插件是否安装成功
bash
bin/logstash-plugin list | grep -E 'sls|kafka'
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
logstash-input-sls
logstash-integration-kafka
 ├── logstash-input-kafka
 └── logstash-output-kafka

4 更新

4.1 Helm

修改了 values.yaml 文件之后,执行命令进行新版本部署。

bash
helm upgrade -f values.yaml logstash elastic/logstash --namespace ualc-system

参考文档

最近更新