00:00:00
20. Logstash 收集阿里云sls日志
1 简介
Logstash 是一个开源的日志处理工具,用于收集、转换和发送日志数据。它可以从多个来源接收日志,如文件、数据库、消息队列等,并将其发送到不同的目标,如 Elasticsearch、Kafka、Redis 等。Logstash 提供了强大的插件系统,允许用户根据需要自定义数据处理和转换逻辑。
Logstash 相比同类型的日志采集工具,有以下优势:
- 插件丰富:Logstash 提供了丰富的插件生态系统,支持从多种来源接收日志、对日志进行转换和处理,并将其发送到不同的目标。
- 可扩展性:Logstash 可以根据需要进行水平扩展,以处理大规模的日志数据。
- 配置简单:Logstash 使用简单的配置文件来定义日志采集、转换和发送的流程,无需编写复杂的代码。
- 社区支持:Logstash 有一个活跃的社区,提供了丰富的文档、插件和支持,帮助用户解决问题并获取帮助。
2 安装
2.1 Helm 安装
本次演示安装指定版本:7.16.3。
- 下载 logstash 7.16.3 的 helm 包。
bash
helm pull elastic/logstash --version 7.16.3- 修改 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。
- 为什么要改为 warn?
- logstash.conf:配置了阿里云 sls 输入插件和 kafka 输出插件,过滤插件在 filter 中配置,这里就根据实际使用情况修改了,有不懂的可以参考Logstash 官方文档。
- 部署 logstash
bash
helm install -f values.yaml logstash elastic/logstash --namespace ualc-system3 安装插件
3.1 容器内安装插件
这里演示安装 logstash-input-sls 插件。
- 编写 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- 构建镜像
bash
sudo docker build -t demo-registry.moweolong.com/library/logstash:7.16.3-input-sls .- 推送镜像
bash
sudo docker push demo-registry.moweolong.com/library/logstash:7.16.3-input-sls- 查看插件是否安装成功
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-kafka4 更新
4.1 Helm
修改了 values.yaml 文件之后,执行命令进行新版本部署。
bash
helm upgrade -f values.yaml logstash elastic/logstash --namespace ualc-system