本文将介绍如何利用 Logstash 采集 OCI FLB 服务产生的日志数据,通过 logstash 从兼容S3协议的对象存储中获取FLB日志数据,并存储至Loki。

OCI(Oracle Cloud Infrastructure)是由 Oracle 提供的云计算服务,提供强大的基础设施和平台服务,包括计算、存储、数据库、网络和安全等,为企业提供灵活、可扩展和安全的云解决方案。

FLB: OCI 负载均衡是 Oracle 提供的一项重要服务,用于转发传入的流量以确保应用程序的高可用性和性能。

Connector Hub: OCI提供的数据流集成工具,可以对接多种数据流;

Logstash: Logstash 是一个强大的开源数据收集引擎,用于实时处理和转换日志和事件数据流。它支持各种输入源和输出目的地,包括 Elasticsearch、Loki、Kafka 等。

Loki: Loki 是一个轻量级的日志聚合工具,专注于容器化环境和微服务架构,提供高效的日志收集和查询。Loki 使用 Prometheus 的标签模型来存储和查询日志数据,使得快速、灵活的日志监控成为可能。

1 架构

示例展示从 OCI FLB 中输出日志到 logging, 由 hub 服务 将 logging 日志输出到 对象存储,然后 logstash 进行数据处理,存储到loki,最后由Grafana进行展示。

2 启动 FLB 日志

FLB有access和error两种类型的日志,默认 OCI LB 日志默认是关闭的,需要开启和配置存储信息。

2.1 开启 FLB 日志

2.2 配置日志启动选项

3 配置 OCI 负载均衡日志输出至对象存储

3.1 配置 connector hub

3.2 配置数据源

3.3 配置 lb 源端日志

3.4 配置目标端对象存储

4 logstash 服务安装

# 配置初始化

# selinux
setenforce 0 && sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config && getenforce

systemctl disable firewalld && systemctl stop firewalld

# swap 关闭
swapoff -a

vim /etc/fstab


# 创建 logstash 管理用户
useradd -s /sbin/nologin loki

# 下载 & 安装 logstash
wget  <https://artifacts.elastic.co/downloads/logstash/logstash-8.11.3-linux-x86_64.tar.gz>

tar xf logstash-8.11.3-linux-x86_64.tar.gz

mv logstash-8.11.3 /usr/local/logstash

chown loki.loki -R /usr/local/logstash

5 安装 logstash-output-loki插件

# 默认情况下,logstash 没有安装 loki 插件
cd /usr/local/logstash/
bin/logstash-plugin install logstash-output-loki

6 配置 logstash 采集 OCI 对象存储日志

# vim /usr/local/logstash/config/logstash-s3.conf
input {
        s3 {
                bucket => "loki-storage"
                access_key_id => "ak"
                secret_access_key => "sk"
                endpoint => "region-s3.endpoint"
                region => "ap-tokyo-1"
                additional_settings => {
                  force_path_style => true
                  follow_redirects => false
                }
        }
}

filter {
    json {
            source => "message"
            target => "jsoncontent"
      }

    if [jsoncontent][type] == "com.oraclecloud.loadbalancer.access" {  # 判断, 如果是access日志增加如下标签
    mutate {
           add_field => {
             "listenerName" => "%{[jsoncontent][data][listenerName]}"
             "lbStatusCode" => "%{[jsoncontent][data][lbStatusCode]}"
          }
     }
} else if [jsoncontent][type] == "com.oraclecloud.loadbalancer.error" { # 判断, 如果是error日志增加如下标签
    mutate {
           add_field => {
             "listenerName" => "%{[jsoncontent][data][listenerName]}"
             "lbStatusCode" => "%{[jsoncontent][data][lbStatusCode]}"
          }
     }

}
    mutate {
           add_field => {
             "job" => "%{[jsoncontent][source]}"
             "logtype" => "%{[jsoncontent][type]}"
          }
     }
}

output {
      #  stdout {  # 标准输出,调试用
    #            codec => rubydebug
    #    }
        loki {
                url => "<http://127.0.0.1:8001/loki/api/v1/push>" #  输出到loki
        }
}

7 Logstash 开机启动服务

cat > /usr/lib/systemd/system/logstash.service << EOF
[Unit]
Description=Logstash
Documentation=https://www.elastic.co/products/logstash
After=network.target
ConditionPathExists=/usr/local/logstash/config/logstash-s3.conf

[Service]
Type=simple
User=loki
Group=loki
ExecStart=/usr/local/logstash/bin/logstash -f /usr/local/logstash/config/logstash-s3.conf
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

8 启动 Logstash

systemctl start logstash 
systemctl enable logstash 

9 logstash日志输出

10 参考资料

logstash 表达式

Accessing event data and fields | Logstash Reference [8.12] | Elastic

安装 logstash-output-loki

Logstash plugin | Grafana Loki documentation

🚀 炸鸡物料库 🚀

🔍 内容定位: IT技术领域,云计算、云原生、DevOps 和 AI 等相关的技术资讯、实践和经验分享。面向开发、系统和云计算,提供实用的技术内容。

🎯 目标受众: 面向开发者、系统管理员和云计算从业者,提供实用的技术内容。

🗓️ 更新频率:每周更新,每次分享都为您带来有价值的技术内容。

🤝 互动与反馈: 鼓励读者留言、评论,有问题随时提问,我们将积极互动并提供帮助。

💌 订阅方式: 扫描二维码或搜索“炸鸡物料库”关注,不错过每一篇精彩内容。

🌐 合作与分享: 如果您有技术分享或合作计划,欢迎联系我们,共同成长!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐