行业解决方案:云原生系列5 容器化日志之EFK
优采云 发布时间: 2022-10-25 01:22行业解决方案:云原生系列5 容器化日志之EFK
上图是EFK架构图,k8s环境下常用的log采集方法。
日志要求
1 采集采集微服务的日志,可以根据请求id跟踪完整的日志;
2.统计请求接口的耗时。如果最大响应时间超过最大响应时间,应报警并进行针对性调优;
3 慢sql排行榜和报警;
4 异常日志排名列表,并报警;
5 页面请求排名慢并报警;
k8s 日志采集
k8s本身不会为你登录采集,需要你自己做;
k8s的容器日志处理方式中使用的集群级日志,
即容器销毁、pod漂移、Node宕机等都不会影响容器日志;
容器的日志会输出到stdout、stderr,对应的存储在宿主机的目录下。
即/var/lib/docker/container;
通过 Node 上的日志代理转发
在每个节点上部署一个守护进程,运行一个日志代理来采集日志,
比如fluentd,采集在主机对应的数据盘上进行日志,然后输出到日志存储服务或者消息队列;
优缺点分析:
优点 1 每个 Node 只需要部署一个 Pod采集 日志 2 不会侵入应用程序 缺点 应用程序输出的日志必须直接输出到容器的 stdout 和 stderr
Pod内部通过sidecar容器转发到日志服务
通过在pod中启动一个sidecar容器,比如fluentd,读取容器挂载的volume目录,输出到日志服务器;
日志输入源:日志文件
日志处理: logging-agent ,如 fluentd
日志存储:如elasticSearch、kafka
优缺点分析:
优点 1、部署简单;2、对主人友善;缺点 1、消耗资源较多;2.通过kubectl日志看不到日志
例子:
apiVersion: v1
kind: Pod
metadata:
name: counter
spec:
containers:
- name: count
image: busybox
args:
- /bin/sh
- -c
- >
i=0;
while true;
do
echo "$i:$(data)" >> /var/log/1.log
echo "$(data) INFO $i" >> /var/log/2.log
i=$((i+1))
sleep 1;
done
volumeMounts:
- name: varlog
mountPath: /var/log
- name: count-agent
image: k8s.gcr.io/fluentd-gcp:1.30
env:
- name: FLUENTD_ARGS
value: -c /etc/fluentd-config/fluentd.conf
valumeMounts:
- name: varlog
mountPath: /var/log
- name: config-volume
mountPath: /etc/fluentd-config
volumes:
- name: varlog
emptyDir: {}
- name: config-volume
configMap:
name: fluentd-config
Pod 内部通过 sidecar 容器输出到 stdout
适用于应用容器只能输出日志到文件,不能输出到stdout和stderr的场景;
通过一个sidecar容器,直接读取日志文件,然后重新输出到stdout、stderr、
可以在Node上使用日志代理转发的模式;
优缺点分析:
对比显示,优势只需要消耗更少的CPU和内存,共享卷处理效率比较高。缺点 主机上有两条完全相同的日志,磁盘利用率不高。
应用容器直接输出日志到日志服务
适用于日志系统成熟的场景,日志不需要经过k8s;
EFK 引入 fluentd
fluentd 是一个用于统一日志记录层的开源数据采集器。
flentd 允许您统一日志采集和更好地使用和理解数据;
四大特点:
统一日志层
fluentd 隔离数据源,提供与后台系统统一的日志层;
简单灵活
提供500多个插件,连接大量数据源和输出源,内核简单;
广泛的验证
自 Fluentd 以来,5000 多家数据驱动型公司
最大的客户端通过它从 50,000 多台服务器采集日志
**云原生**
是云原生CNCF的成员项目
4大优势:
统一的 JSON 日志
Fluentd 尝试使用 JSON 结构化数据,统一了处理日志数据、采集、过滤、缓存、输出日志到多个目的地的各个方面,使用 JSON 进行下游数据处理更简单,因为它已经有足够的访问结构并保留了足够灵活的场景;
插件架构
fluntd 有一个灵活的插件系统,允许社区扩展其功能。超过 500 个社区贡献的插件连接了许多数据源和目的地;通过插件,您可以开始更好地利用您的日志
最低资源消耗
用c和ruby写的,对系统资源要求很低,40M左右的内存可以处理13k/次/秒,如果需要更紧凑的内存,可以使用Fluent bit,更轻的Fluentd
内核可靠
Fluentd 支持内存和基于文件的缓存,防止内部节点数据丢失;
还支持鲁棒故障并可以配置高可用模式,超过 2000 家数据驱动的公司在不同的产品中依靠 Fluentd 更好地使用和理解他们的日志数据
使用流利的理由:
简单灵活
10分钟即可在电脑上安装fluentd,立即下载,超过500个插件连接数据源和目的地,插件也易于开发和部署;
开源
基于Apache2.0证书完全开源
可靠和高性能
超过 5,000 家数据驱动型公司的不同产品和服务依靠 fluentd 更好地使用和理解数据。事实上,根据datadog的调查,使用docker运行的技术排在前7位;
一些流利的用户拥有来自数千台机器的实时 采集 数据。每个实例只需要大约 40M 的内存。缩放时,可以节省大量内存。
社区
fluentd 可以改进软件并帮助其他人更好地使用它
大公司使用代言:微软、亚马逊;pptv;
可以与elasticSearch + kibana结合,组成日志套件;
快速搭建EFK集群,采集应用日志,配置性能排名;
弹性搜索
Elasticsearch 是一个分布式的 RESTful 搜索和数据分析引擎。
能够解决正在出现的各种用例。作为 Elastic Stack 的核心,
它集中存储您的数据,并帮助您发现预期和意外。
详细介绍:
木花
Kibana 是一个开源数据分析和可视化平台,是 Elastic Stack 的成员。
旨在与 Elasticsearch 配合使用。您可以使用 Kibana 在 Elasticsearch 索引中搜索数据,
查看和互操作。您可以使用图表、表格和地图轻松分析和呈现数据。
[英文]
查看和互操作。您可以轻松地使用图表、表格和地图来分析和呈现数据。
Kibana 使大数据易于理解。这很简单,
基于浏览器的界面允许您快速创建和共享动态数据仪表板,以跟踪 Elasticsearch 中的实时数据变化。
详细介绍:
容器化 EFK 实现路径
直接往下拖代码,然后配置上下文、命名空间,就可以安装了;
cd elk-kubernetes
./deploy.sh --watch
下面是deploy.sh的脚本,可以简单看一下:
#!/bin/sh
CDIR=$(cd dirname "$0" && pwd)
cd "$CDIR"
print_red() {
printf '%b' "\033[91m$1\033[0m\n"
}
print_green() {
printf '%b' "\033[92m$1\033[0m\n"
}
render_template() {
eval "echo \"$(cat "$1")\""
}
KUBECTL_PARAMS="--context=250091890580014312-cc3174dcd4fc14cf781b6fc422120ebd8"
NAMESPACE=${NAMESPACE:-sm}
KUBECTL="kubectl ${KUBECTL_PARAMS} --namespace=\"${NAMESPACE}\""
eval "kubectl ${KUBECTL_PARAMS} create namespace \"${NAMESPACE}\""
#NODES=$(eval "${KUBECTL} get nodes -l 'kubernetes.io/role!=master' -o go-template=\"{{range .items}}{{\\\$name := .metadata.name}}{{\\\$unschedulable := .spec.unschedulable}}{{range .status.conditions}}{{if eq .reason \\\"KubeletReady\\\"}}{{if eq .status \\\"True\\\"}}{{if not \\\$unschedulable}}{{\\\$name}}{{\\\"\\\\n\\\"}}{{end}}{{end}}{{end}}{{end}}{{end}}\"")
NODES=$(eval "${KUBECTL} get nodes -l 'sm.efk=data' -o go-template=\"{{range .items}}{{\\\$name := .metadata.name}}{{\\\$unschedulable := .spec.unschedulable}}{{range .status.conditions}}{{if eq .reason \\\"KubeletReady\\\"}}{{if eq .status \\\"True\\\"}}{{if not \\\$unschedulable}}{{\\\$name}}{{\\\"\\\\n\\\"}}{{end}}{{end}}{{end}}{{end}}{{end}}\"")
ES_DATA_REPLICAS=$(echo "$NODES" | wc -l)
if [ "$ES_DATA_REPLICAS" -lt 3 ]; then
print_red "Minimum amount of Elasticsearch data nodes is 3 (in case when you have 1 replica shard), you have ${ES_DATA_REPLICAS} worker nodes"
print_red "Won't deploy more than one Elasticsearch data pod per node exiting..."
exit 1
fi
print_green "Labeling nodes which will serve Elasticsearch data pods"
for node in $NODES; do
eval "${KUBECTL} label node ${node} elasticsearch.data=true --overwrite"
<p>
done
for yaml in *.yaml.tmpl; do
render_template "${yaml}" | eval "${KUBECTL} create -f -"
done
for yaml in *.yaml; do
eval "${KUBECTL} create -f \"${yaml}\""
done
eval "${KUBECTL} create configmap es-config --from-file=es-config --dry-run -o yaml" | eval "${KUBECTL} apply -f -"
eval "${KUBECTL} create configmap fluentd-config --from-file=docker/fluentd/td-agent.conf --dry-run -o yaml" | eval "${KUBECTL} apply -f -"
eval "${KUBECTL} create configmap kibana-config --from-file=kibana.yml --dry-run -o yaml" | eval "${KUBECTL} apply -f -"
eval "${KUBECTL} get pods $@"
</p>
简单分解部署流程:
我的k8s环境还没有搭建成功,后续搭建成功后会给出详细的安装说明。
概括
一句话总结这篇文章:EFK是通过日志代理客户端采集应用日志的常用实现方式。
原创不易,关注有诚意,转发价格更高!转载请注明出处,让我们互相交流,共同进步。欢迎交流。
原来的:
作者:李富春
标题:Cloud Native Series 5 EFK for Containerized Logs
相关阅读标题:《免费开源》基于Vue和Quasar的前端SPA项目:crudapi后台管理系统EXCEL数据导入(九)基于Vue和Quasar的前端SPA项目数据导入(九)回顾
通过上一篇文章基于Vue和Quasar的前端SPA项目中业务数据的介绍(7),实现了业务数据的基本crud功能。本文主要介绍批量导入业务数据的相关内容。
介绍
当数据量比较大时,手动录入数据会比较慢,所以采用批量导入的方式录入数据,提高效率。这里使用的文件格式是 EXCEL。每个业务表都可以自动生成一个EXCEL模板文件。模板下载后直接编辑EXCEL表格,然后上传EXCEL文件批量导入数据。
用户界面界面
产品介绍
API
业务数据导入相关API,包括获取模板和导入两个功能,可以通过swagger文档查看。通过axios封装api,名称为table
import { axiosInstance } from "boot/axios";
const table = {
import: async function(tableName, data, progressCallback) {
return axiosInstance.post("/api/business/" + tableName + "/import", data,
{
headers: HEADERS,
onUploadProgress: (progressEvent) => {
if (progressCallback) {
progressCallback(progressEvent)
}
}
});
},
getImportTemplate: function(tableName) {
return axiosInstance.get("/api/business/" + tableName + "/import/template",
{
params: {
}
}
);
}
};
export { table };
核心代码代码结构
代码结构
QFile 组件
q-file 组件用于上传EXCEL。
产品示例
下载模板,主要字段包括名称、品牌、颜色、价格、数量等,然后编辑EXCEL。
导入后查看,发现3条数据导入成功。
概括
主要介绍批量导入业务数据的功能。不同业务表单可自动生成模板文件,通过配置实现零代码批量导入业务数据功能。稍后将介绍一些高级功能。
[英文]
本文主要介绍业务数据批量导入功能,不同业务表单可自动生成模板文件,通过配置零代码实现业务数据批量导入功能。稍后将介绍一些高级功能。
演示
官网地址:
测试地址:
附上源地址 GitHub地址
吉特地址
由于网络原因,GitHub可能会比较慢,可以改成访问Gitee,代码会同步更新。
原来的:
添加一名作者
题目:《免费开源》基于Vue和Quasar前端SPA项目crudapi后台管理系统EXCEL数据导入(九)
解决方法:关关采集器辅助(自动解决网站断更错更)软件使用说明
经过近一年的开发,第三版关冠辅助软件首次开启公测。屏幕截图中描述了配置方法和使用说明。
注意,本页主要介绍api的配置。如果使用本软件直接连接数据库,在此处进入(新手推荐使用直连数据库模式),点击进入...
主要的意思:
①:自动解决网站中断。
②:自动解决重复内容采集,导致更新失败。
③:处理内容为空或内容缺失并自动补充内容的系列问题。
第一步:配置方法
1.下载软件
①:首先下载关冠辅助软件,(软件运行环境,.net4.x)
下载地址(如果打不开,请复制到浏览器)::99/ggsoft/intesoft.rar
②:api接口下载:Jackie接口(gbk)
2.打开软件运行
下载软件后,会得到一个exe可执行软件,如图,双击或右键运行
3.账号登录
本软件需要账号登录。目前可以使用免费的公测账号登录(账号和密码都是:),如图:
4.系统配置,这一步需要注意,出错会导致运行失败
点击系统设置
点击系统设置,需要输入密码,默认密码为空,直接确认即可,如果提示错误,忽略,直接进入系统相关配置
注:当前版本仅支持远程模式,数据库模式将在后续开发
5.下载连接远程接口的api,下载地址(第一步下载的api接口):
6.开始配置远程接口对接,如图配置。
比如我的域名是:,插件新建文件夹的名称是inteapi,如图。
要生成配置,您可以在此处选择 opf。其他无效。相关功能将在稍后启用。如果你对系统做过二次开发,取消了opf索引文件,这里不要选择。
配置完成后,点击【系统设置】右下角的【确定】保存。
注意:系统设置受密码保护。如果下次需要修改此页面,请输入密码,即系统设置中设置的密码。如果忘记密码,则需要全部重新配置
以上设置完成后,api接口设置完成。
第二步:导入 Guanguan采集器 规则
打开 Guan采集器 根目录下的 Rules 文件夹,里面收录了 Guan采集器 的所有 采集 规则(.xml 格式)
将Rule文件夹直接复制到官官辅助的根目录下
第三步:如何使用(注意设置是实时生效的,即在采集过程中设置立即生效)
1、点击左上角【采集(维护)】,选择【手动更新(维护)】,目前只有一个选项
2、采集器修复页面说明,如图:
采集模式选择(自动修复模式)
1.【单份加载】模式
单模式加载有两种选择
①:指定ID 示例:1、2、3、4、5、6等,中间用逗号“,”隔开,如图:
②:ID段:比如要从对方的第1000个开始到对方的第2000个,如图输入1000-2000:
2.批量加载:
注意:本软件支持自增变量id。如果对方没有多页,这里的设置无效。例如,抓取设置对首页无效。
单击导入后,软件开始运行。如果修复成功且不显示自动跳过不修复,则显示的都是自动修复失败,需要人工协助修复。
手动模式说明:
其他功能的使用方法与关关的手动模式采集器类似,替换模式略有不同,强调手动替换模式的使用,如图:
其他功能基本一目了然,不多解释
注意:手动修复时,由于远程获取数据会有一定的延迟(相对于关关采集器会慢一些),必须等数据完全正常后再进行下一步操作,否则可能会出现错误,后续的数据库模式可以避免这个问题