背景

原有日志方案查询日志很不方便且效率低,而且也不支持基于日志的高级操作。如:聚合,图形展示,关键字检测等。

方案

接入阿里云的sls日志服务。

实施

1、通过环境变量进行日志接入

配置如下:

字段 说明 示例 注意事项
aliyun_logs_{key} - 必选项。{key}只能包含小写字母、数字和-。
- 若不存在aliyun_logs_{key}_logstore,则默认创建并采集到名为{key}的logstore。
- 当值为stdout表示采集容器的标准输出;其他值为容器内的日志路径。
- name: aliyun_logs_catalina
stdout
- name: aliyun_logs_access-log /var/log/nginx/access.log
- 默认采集方式为极简模式,如需解析日志内容,建议使用日志服务控制台并参见通过DaemonSet-控制台方式采集Kubernetes文件通过DaemonSet-控制台方式采集Kubernetes标准输出通过DaemonSet-CRD方式采集日志进行配置。
- {key}需保持在K8s集群内唯一。
aliyun_logs_{key}_tags 可选。值为{tag-key}={tag-value}类型,用于对日志进行标识。 - name: aliyun_logs_catalina_tags
app=catalina
-
aliyun_logs_{key}_project 可选。值为指定的日志服务Project。当不存在该环境变量时为您安装时所选的Project。 - name: aliyun_logs_catalina_project
my-k8s-project
Project需与您的Logtail工作所在Region一致。
aliyun_logs_{key}_logstore 可选。值为指定的日志服务Logstore。当不存在该环境变量时Logstore和{key}一致。 - name: aliyun_logs_catalina_tags
my-logstore
-
aliyun_logs_{key}_shard 可选。值为创建Logstore时的shard数,有效值为1~10。当不存在该环境变量时值为2。 - name: aliyun_logs_catalina_shard
4
-
aliyun_logs_{key}_ttl 可选。值为指定的日志保存时间,有效值为1~3650。
- 当取值为3650时,指定日志的保存时间为永久保存。
- 当不存在该环境变量时,默认指定日志的保存时间为90天。
- name: aliyun_logs_catalina_ttl
3650
-
aliyun_logs_{key}_machinegroup 可选。值为应用的机器组。当不存在该环境变量时与安装Logtail的默认机器组一致。 - name: aliyun_logs_catalina_machinegroup
my-machine-group
-

优点:配置简单,不容易出现问题。

缺点:无法使用logtail的高级功能,如regex,geoip,split等操作。

2、通过CRD进行配置

配置如下(以daemon为例):

apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
name: daemon-log
spec:
logstore: applog
project: pre-app-log
logtailConfig:
# log file's input type is 'file'
inputType: file
# logtail config name, should be same with [metadata.name]
configName: daemon-log
inputDetail:
logType: common_reg_log
advanced:
blacklist:
dir_blacklist: ["/data/logs/dump", "/data/logs/*/xxljob", "/data/logs/*/apm"]
filepath_blacklist: []
logPath: /data/logs/daemon
filePattern: "*.log"
dockerIncludeEnv:
PROJECTID: "d0"
dockerExcludeEnv: {}
dockerFile: true
logBeginRegex: '\d+-\d+-\d+\s\d+:\d+:\d+[,|\.|\s].*'

配置过程中遇到两个问题:

1、配置通用收集配置的时候:云上K8S收集应用日志的时候出现了tag开头的字段获取到的pod_name,container_name等都是一个ds的信息,不是原有pod的信息。

示例图如下:

原因:

由于挂载的是宿主机路径,在配置logtail配置文件的时候应用pod的/data/logs是docker的overlayfs的路径,只配置到这一层的话,logtail只在docker的overlayfs文件系统中搜索/data/logs/**/*.log,这样无法找到我们的/data/logs/的文件夹下日志。

当挂载了一个子目录(用hostpath),配置的是父目录采集(在 docker默认目录overlayfs),在docker里面会认为你要采集的是 overlayfs。

所以此时我们无法进行正常的日志采集,所有的日志都是来自于logcleanpre挂载的/data/logs内部。

解决办法:

i、修改我们的挂载方式:宿主机上的/var/lib/docker/logs/挂载到/data/logs,logcleanpre也需要改造。

ii、每个应用pod配置一个logtail的CRD配置。(目前通过这种方式处理)

2、增加logBeginRegex或者regex,会导致页面刷新有告警。但是在控制台操作的时候正则验证和解析都是正常的而且日志也是按照正则正确的收集进来的。

示例图如下:

问题已被阿里云收录,但是暂未解决(2020.10.23)。

优点:配置灵活,基本能满足对日志处理的全部操作。

缺点:配置文档不完整,容易踩坑。

K8S日志接入sls配置的更多相关文章

  1. 消费阿里云日志服务SLS

    此文档只关心消费接入,不关心日志接入,只关心消费如何接入,可直接跳转到[sdk消费接入] SLS简介 日志服务: 日志服务(Log Service,简称 LOG)是针对日志类数据的一站式服务,在阿里巴 ...

  2. 一文看懂 K8s 日志系统设计和实践

    上一篇中我们介绍了为什么需要一个日志系统.为什么云原生下的日志系统如此重要以及云原生下日志系统的建设难点,相信DevOps.SRE.运维等同学看了是深有体会的.本篇文章单刀直入,会直接跟大家分享一下如 ...

  3. 【阿里云产品公测】简单日志服务SLS使用评测 + 教程

    [阿里云产品公测]简单日志服务SLS使用评测 + 教程 评测介绍 被测产品: 简单日志服务SLS 评测环境: 阿里云基础ECS x2(1核, 512M, 1M) 操作系统: CentOS 6.5 x6 ...

  4. k8s日志收集方案

    k8s日志收集方案 三种收集方案的优缺点: 下面我们就实践第二种日志收集方案: 一.安装ELK 下面直接采用yum的方式安装ELK(源码包安装参考:https://www.cnblogs.com/De ...

  5. ELK日志系统之通用应用程序日志接入方案

    前边有两篇ELK的文章分别介绍了MySQL慢日志收集和Nginx访问日志收集,那么各种不同类型应用程序的日志该如何方便的进行收集呢?且看本文我们是如何高效处理这个问题的 日志规范 规范的日志存放路径和 ...

  6. k8s 日志收集之 EFK

    如今越来越多的应用部署在容器之中,如何收集日志也是一个很重要的问题.服务出问题了,排查问题需要给开发看日志.服务一般会在多个不同的 pod 中,一个一个的登进去看也的确不方便.业务数据统计也需要日志. ...

  7. 4.2 K8S超级完整安装配置

    前言: 采坑 k8s有3种安装方式,如下所示: minikube:这是一个k8s集群模拟器,只有一个节点的集群,只为了测试使用,master和node都在一台机器上 直接使用带有容器功能的云平台安装: ...

  8. ansble通过脚本定时清理k8s日志

    环境:环境k8s1.17,ansble通过脚本定时清理k8s日志 [root@tidb-21 delete-k8s-logs]# lsansib-delete.sh delete-logs.sh [r ...

  9. 如何在 ETL 项目中统一管理上百个 SSIS 包的日志和包配置框架

    一直准备写这么一篇有关 SSIS 日志系统的文章,但是发现很难一次写的很完整.因为这篇文章的内容可扩展的性太强,每多扩展一部分就意味着需要更多代码,示例和理论支撑.因此,我选择我觉得比较通用的 LOG ...

随机推荐

  1. 你会用哪些JavaScript循环遍历

    总结JavaScript中的循环遍历定义一个数组和对象 const arr = ['a', 'b', 'c', 'd', 'e', 'f']; const obj = { a: 1, b: 2, c: ...

  2. 《PHP设计模式大全》系列分享专栏

    <PHP设计模式大全>已整理成PDF文档,点击可直接下载至本地查阅https://www.webfalse.com/read/201739.html 文章 php设计模式介绍之编程惯用法第 ...

  3. 将Acunetix与CircleCI集成

    如果要在DevSecOps中包含Acunetix ,则需要将其与CI / CD系统集成.Acunetix具有针对最受欢迎的CI / CD系统Jenkins的现成集成.但是,您可以使用Acunetix ...

  4. Docker进阶:容器卷、DockerFile、Docker网络原理

    1.Docker镜像 1.1镜像是什么 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和机遇运行环境开发的软件. 包含一个软件的所有内容.蒋所有的应用和环境,直接打包为docker镜像,直 ...

  5. 多es 集群数据迁移方案

    前言 加入新公司的第二个星期的星期二 遇到另一个项目需要技术性支持:验证es多集群的数据备份方案,需要我参与验证,在这个项目中需要关注到两个集群的互通性.es集群是部署在不同的k8s环境中,K8s环境 ...

  6. 【剑指offer】03.数组中重复的数组

    剑指 Offer 03. 数组中重复的数字 知识点:数组:哈希表:萝卜占坑思想 题目描述 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些 ...

  7. python + mysql 实现输入数据

    实例如下: import datetimeimport pymysqldef insert_into(): db = pymysql.connect("localhost",&qu ...

  8. springboot-7-WebSocket

    一.WebSocket简介 为什么要什么websocket:https://blog.csdn.net/qq_42429911/article/details/88601279 用websocket可 ...

  9. 本地项目的npm安装方法

    有些node项目如一些工具类的项目,安装以后通过命令行执行其功能.但是而对于本地自建的项目如何通过npm安装,然后通过命令行(项目定义了命令行)工具执行命令调用其功能呢? 对于这种情况,笔者主要通过两 ...

  10. redis的单线程

    一.redis为什么这么快 1.完全基于内存,绝大部分请求是纯粹的内存操作,非常快速.数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1):2.数据结构简单 ...