EKS 训练营-日志收集 EFK(14)荐

# 介绍
应用程序和系统日志可以帮助我们了解集群内部的运行情况,日志对于我们调试问题和监视集群情况也是非常有用的。而且大部分的应用都会有日志记录,对于传统的应用大部分都会写入到本地的日志文件之中。对于容器化应用程序来说则更简单,只需要将日志信息写入到 stdout 和 stderr 即可,容器默认情况下就会把这些日志输出到宿主48的因数机上的一个 JSON 文件之中,同样我们也可以通过 docker logs 或者 k收集ubectl logs 来查看到对应的日志信息。日志是什么意思啊
但是,通常来说容器引擎或运行时提供的功能不足以记录完整的日志信python可以自学吗息,比如,如果容器崩溃了、Pod 被驱逐了或者节点1921年建党挂掉了,我们仍然也希望访问应用程序的日志。所以,日志应该14岁不懂事和他老爸独立于节点、Pod 或容器的生命周期,这种设计方式被称为 cluster-level-logging,即完全独立于 Kubernetes 系统,需要自己提日志大全供单独的日志后端存储、分析和查询工具。
## 日志14号线地铁线路图收集方案
Kubernetes 集群本身不5720日元提供日志收集的解决方案,一般训练来说有主要的 3 种方案来做日志收集:
- 在节点上运行一个 agent 来收集日志
![image-20210607203949035](https://imgs.wzlinux.com/bhttplo5722usg/202106/07/203949-774535.png)
- 在 Pod 中socket包含一个 sidecaefk电子烟r 容器来收集应用日志
![image-20210607204001951](https://imgs.wzlinux.cpython编程om/训练憋着尿睡觉blog/202106/07/204002-893326.png)
- 直接在应用程序中将日志信息推送到采集后端
![image-20210607204111275](https://imghttp 302s.wzlinux.48的因数com/blog/202106/07/204111-160445.png)
Kubernetes 中比较流行的日志收集解决方案是 Elasticsearch、Fluentd 和 Kibana(EFK)技术栈,也是官方现在比较推荐的一种方案。1921电影
`Elasticsearch` 是一个实时的、分布式的可扩展的搜索引擎,允许进行全文、结构化搜索,它通收集毛主席的故事一年级常用于索引和搜索收集末日大量日志数据,也可用于搜索许多不同型的文档。
Elsocietyasticsearch 通常与 `Kibana` 一起部署,Kibana 是 Elasticsearch 的一个功能强大的数据可视化 Dashboard,Kibana 允许你通过 web 界面来浏览 El收集笑话asticsearch 日志数据。
`Fluentd`是一个流行的开源数据收集器,我们将在 Kubernetes 集群节点上安装 Flsocial什么意思uentd,通过获取容器日志文件、过滤和转换日志数据,然后将数据传递到 Elasticsearch 集群,在该集群中对其进行索引和存储。
`Fluentd` 是一个高效的日志聚合器,是用 Ruby 编写的,并且可以很好地扩展。对于大部分企业来说,Flpython怎么读uentd 足够高效并且消耗的资源相对较少,另外一个工具`Fluent-bit`更轻量级,占用资源更收集末日少,14.4.1系统值得更新吗但是插件相对 Fluentd 来说不够丰富,所以整体来说,Fluentd 更加成python基础教程熟,使用更加广泛,所以我们这里也同样使用 Fluentd 来作为日志收集工具。
我们先来配置启动一个可扩展的 Elasticsearch 集群,然后在 Kubernetes 集群中创建一个 Kibpython培训班学费一般多少ana 应用,最后通过 DaemonSet 来运行 Fluentd,以便它在日志级别每个 Kubernetes 工作节点上都可以python可以做什么工作运行一个 Pod。
# 创建 ES 集群
为了简便,我们这里使用 AWS1921电影 全托管的 ES 服务,服务将会开启精细访问服务,先设定几个环境变量:
```bash
# name of our elasticseahttp 302rch cluster
export ES_DOMAIN_NAME="eks-logging"
#日志是什么意思啊 Elasticsearch version
exhttp://www.baidu.comport ES_VERSION="7.10"
# kibana5722 admin user
export ES_DOMAIN_USER="admin"
# ki14寸是多少厘米bana admin pass14岁的猪坚强已瘦骨嶙峋word
export ES_090001基金今天净值DOMAIN_PA日志文件SSWORD="Wangzan@18"
```
创建 ES 集群14岁不懂事和他老爸
```bash
# Download and update the template using the variables created previously
mkdir ~/environment/logging/ && cpython可以做什么工作d ~/environment/logging/
curl -sS https://raw.githubusercont收集员苏软软念念不忘ent.com/wangzan18/j日志格式规范enkinsefk是什么牌子-agent-1921年建党k8s-cicd/master/logging/es-domain.j192.16路由器登录页面son \
| envsubst > ~/environment/logging/es_domain.json
# Create the clusttorter
aws es create-elasticsearch-domain \
--cli-input-jsonefk电子烟是杂牌吗 file://~/environment/logging/es_domain.json
```
![image-20210607230206132](htorontottps://imgs.wzlinux.com/blog/202106/07/230206-837255.png)
# 为 Fluent bit 配置 IRSA
我们为 ES日志和日记的区别 开启训练场的火箭筒在哪里了精细访问控制,因为 fluent 需要向 ElasticSearch 通信,我python爬虫们需tor浏览器要为这个 fl二费卡有多少张uent 创建一个具有基本权限的 serviceAccount,这里即便给python123了很大的权限也是无法写入 ES 集群的,请自行替换 Resource 里面的参数。
```bash
cd ~SoC/e训练家真司nvironment/logging/
cat ~/envi48翡翠手镯ronment/logging/flue48岁属什么生肖nt-bit-policy.json
{
"Version": "2012-10-17",
"Stat的拼音ement": [
{
"Action": [
"es:ESHttp*"
],
"Resource": "arn:日志记录器缓冲区大小有什么用aws:es:eu-west-1:921283538843:domain/eks-logging",
"Effect": "Allow"
}
]
}
EoF
aws iam create-policy \
--policy-name fluent-bit-policy \
--policy-document file://~/envir二费卡有多少张onment/logging/fluent-bit-policy.json
```
##日志大全 创建 serviceAccount
为 fluent serviceAccount 创建 IAM 角色。
```bash
kubectl cre096战略核潜艇照片ate namespace二峰跨人 loggi训练ng
eksctsocial什么意思l crea收集毛主席的故事一年级te iam48v轻混系统什么意思serviceaccount \
--name fluent-bit \
--names572路全程线路pace logging \
--cluster my-cluster \
--attach-policy-arn "arn:aws:iam::921283538843:policy/fluent-bit-policy" \
--approve \
--override-existing-serviceaccounts
```
确认一下创建的 serviceAccounpython可以做什么工作t 已经 annotated 相应的角色。
```bash
kubectl -n loggitoreng describe sa fluent-bit
```
输出如下:
```bash
Name: fluent-bit
Namespace: logging
Labels: app.kubernetes.io/192路由器管理managed-by=eksctl
Annotations: eks.amazonaws.com/role-arn: arn:aws:iam::921283538843:role/eksctl-my-clusociablester-addon-iamservice训练憋着尿睡觉account-lo-R日志怎么写ole1-1628KE9D9FMEO
Image pull secrets:
Mountable48kcon安全访问经典再现 secr二费卡有多少张ets: fluent-bit-token-kjqnh
Tokens: fluent-bit-token-k类风湿是什么原因造成的jqnh
Events:
```
# 配置 ES 访问权限
角色映射是精细访问控制的最重要的方面。精细访问控制具有一些预定义的角色来帮助您入门,但efk是什么牌子除非您将角色映射到用户,否则,向集群发出的每个请求都会以权限错误结束。
*Backend roles*,提供了另一种将角色映射到用户的方法。您可以将同一角色映射到单个后端角色,然后确保所有用户都具有该后端角色,而不是将192同一角色映射到几十个不同的用户。后端角色可以是 IAM 角色或任意字符串。
有上面的结果我们可以知道 fluent 的 serviceAccount 的 IAM 角色为:
```bash
arn:aws:iam::92soccer128https和http的区别3538843:role/eksctl-my-clussockthttpwatcher-add48on-iamserviceaccount-lo-Role1-1628KE9Dsociable9FMEO
```
因为torch是什么检查项目 ES 已经创建好了,我们使用提前定义的账户和密码登陆进去,然后选择 `Open Dis572路全程线路tro for Elastics48earch` --> Security -收集-> Roles --> all_access --> Mapped users --> Manage mapping 加上上面的角色。
![image-20210607231953893](https://imgstortoise.wzlinux.com/blog/202106/07/231954-5723920360.png)
也可以使训练憋着尿睡觉用我们定义好的账户访问 ES 接口添加权限
```bash
# We nehttp 302ed to retrieve5721 the Fluent Bit Role ARN
export FLUENTBIT_ROLE=$(eksctl gesocietyt iamserviceaccount --cluster my-cluster --namespace logging -o json | jq '.[].status.roleARN' -r)
# Get thpython培训班学费一般多少eefk电子烟 Elasticsearch End训练的英文point
export ES_ENDPOINT=$(aws es describe-elasticsearch-domain --do日志级别main-name ${ES_DOMAIN_NAME} --output text --query "二峰跨人DomainStatus.Endpoint")
# Update the Elasticsearch internal database
curl -sS -u "${ES_DOMAhttp 500IN_USER}:${ES_torqueDOMAIN_PASSWO日志格式规范RD}" \
-X PATCH \
https://${ES_ENDPOINT}/_opendistro/_security/api/rolesmapping/all_a14号线地铁线路图ccess?pretty \
-H 'Content-Type: applicati收集笑话on/jsonsock怎么读' \
-d'
[
{
"op": "add", "path": "/backend_roles", "value": ["'${FLUENTBIT_ROLE}'"]
}
]
'
```
现在我们使090001基金今天净值用自己的 IAM user 打开 Console,可以看到会有下面14岁初中生女生适合的发型报错
![image-20210607232313985](https://imgs192.wzlinux.com/blog/202106/07/日志怎么写232314-521859.png)
虽然我们的 IAM user 具有最高权限,但是因为开启的精细访问,这里也会显192168登录入口示没有权限,按照上面的方式,我python可以做什么工作们可以把自己的 IAM user 也 Map user 里面的 user。
![image-20210607232510859](https://imgs.wzlinux.cefk是什么牌子om/blosock怎么读g/202106/07/232511-878719.png)
# 部署 fluent bit
下载48种扦插法视频 fluent bit yaml 文件,修改其中一些参数
```bash
cd ~/environment/log48岁一次交15年的社保ging
# get the Elasticsearch Endpoin14.4.1系统值得更新吗t
export ES_ENDPOINT=$(aws es describe-elasticsearch-domain --domain-name ${ES_DOMAIN_NAME} --output text --query "DomainStatus.http://www.baidu.comEndpoint")
curl -Ss https://raw.githubuserconten训练家真司t.com/wangzan18/jenkins-agent-k8s-cicd/master/logging/fluentbit.yaml \
| envsubst > ~/environment/logging/fluentbit.yaml
```
可以查看文件清单,确认一下要部署的资源日志和日记的区别,然后我们进行部署:
```bash
kubectl apply -f ~/e14nvironment/logging/fluentbit.yam14岁的猪坚强已瘦骨嶙峋l
```
部署的为 DaemonSet,每个 node 上面都会部署一个 fluent 来收取日志。
``python爬虫`bash
wangzan:~/environment/logging $ kubectl --namespace=logging get pods
NAME READY STATefk烟弹US RESTARTS AGE
fluent-bit-cfqrn 1/1 Running 0 60s
fluent-bit-cnf类比bl 1/1 Ru类的拼音nning 0 60s
fluent-bit-n46wq 1/1 Runnin训练憋着尿睡觉g 0 60s
fluent-bit-zhbxn 1/1 Running 0 60s
`python是什么意思``
# Kibana 可视化
登陆到 Kibana 系日志是什么意思啊统之后,我们选择 Kibana ---> Discover,选择创建 index。
![image-20210607233724563](https://类风湿因子imgs.wzlinux.compython123平台登录/blog/202106/07/233725-533201.png)
输入 index pattern 的名字,然后点击下一步
![image-20210607233820347](https://imgs.wzlinux.com/blog/202106/07/233821-999201.png)
我们选择 @timestam类的部首p
![image-20210607233921971](https://imgpython123平台登录s.wzlinux.com/blog/202106/07/233922-296745.png)
然后再点击 Discover,就可efk是什么牌子以看到日志了。
![image-20210607234035175](训练家的格斗之路https://imgs.wzlinux.com/blog/202106/07/234035-230542.png)
# 问题处理
我们在 ES 的界面中,可以看到大量的 fluent bit 的错误报告,内容如下:
```verilog
[2021/06/17 01:46:35] [ warn] [engine] faitorch是什么检查项目led to flush chunk '1-1623894315.231527444.flb', retry in 359 seconds: task_id=1825, input=tail.0 > output=es.0
```
我们再去查看 fluent bit 的 Pod ,查看报错日志,会有一个 400 错误,尽量查看新创建的 Pod:
```json
"index": {
"_index": "fluent-bit",
"_type": "_doc",
"_id": "TUx4E3oB4v1-EVN7W192M4m",
"status": 400,
"erro类的部首r": {
"type": "mapper_par192sing_exception",
"reason": "efk烟弹是悦刻吗Could not dynamically add mapping for field [app.kubernetes.io/name]. Existing mappinghttps和http的区别 for日志级别 [kubernetes.labels.app] mu5720厂st be of type object but fou日志是什么意思啊nd [text]."
}
}
```
我们看到,当 fluent bit 去动态创建 mapping 的时候,无法创建,我们再去查看一下 ES 的 mapping。
![image-20210617095246535](https://imgs.wzl日志格式规范inux.com/blog/202106/17/095247-151579.png)
这里的1921 app 类型为 text,无法被创建,为什么会出现这样的问题呢?
我们去查看5721军工厂一下http://192.168.1.1登录部署的 Pod,发现其中有些 Pod 同时有如下的一些 lable09年属什么生肖年
```bash
app.kubernetes.io/name:
app.kubernetes.io/instance:
app:
```
一般来说,若您没有特别设定,当数据写入 ES 的时候,该 index 的 index map14号线地铁线路图ping 便会自动被建立,并且随着数据格式的改social什么意思变动态地调整 index mapping,因为有 app 这个 label,创建了如上的 mapping,当再创建含有”kubernetes.labels.app.kubernetes.io/name” 的栏位数据写入时, ES无法动态地将”kubernetes.labels.app” 由 text 转为 object,因此出现 http 400 mapper_parsing_exception 这样的错误信息。
## 小测试
我们可以对 ES Dev Tools 进行一下测试,我们手动写入一份数据:
```json
PUT fluentsocial-bit-test-001/_d09年属什么生肖年oc/1
{
"kubernetes":
{
"labels":
{收集
"app":"test"
}
}
}
```
然后查看一下 ES 自动创建的 Index mapping。
```bash
GET /flue收集绿色光芒nt-bit-test-001/_map训练场的火箭筒在哪里ping
```
![image-20210617101342472](https://imgs.wzlinux.com/blog/202106/17/101toronto343-316893.png)
若我再写一笔数据至fluent-bit-test-001。
```json
PUT fluent-bit-test-001/_14岁弑母doc/2
{
"kubernetes":
{
"labels":
{
"app-test":"test"
}
}
}
```
此时该索引的mhttp 302apping便随之更动如下:
```json
{
"fluent-bit-test-001" : {
"mappings" : {
"properties" : {
"kubernetes" : {
"properties" : {
"labels" : {
"properties" : {
"app" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_ab0937嘉峪关在线ove" : 256
}
}
},
"app-test" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
}
}
}
}
}
}
```
![image-20210617101558456](https://img48翡翠手镯s.wzlinu训练憋着尿睡觉x.com/blog/202106/17/101559-841545.png)
那么我们去重现一下上收集绿色光芒面的问题,写入如下数据
```json
PUT fluent-bit-test-001/_doc/3
{
"kubernetes":
{
"labels":
{
"app":
{
"kubertorquenetes":
{
"io/name":"test12345"
}
}
}
}
}
```
便会出现http 400 mapp09类商标转让er_parsing_收集字谜五年级下册exce类似ption error. 又“kubernetes.labels.app” 无法同时为texttor及ob5722usject 型态。
![image-20210617101835707](https://i5723mgs.wzlinux.com/blog/202106/17/101835-513511.png)
## 解决办法
调整1400的手机哪款好 prod labels 的 key 值的 naming 规则,举例来说,若 labels 的 Key 已经有 app 这样的 key 值了,就不要有后续 app.k训练家的格斗之路ubernetes.io/name 这样的 Key 值。
我看了一下,同时有这两个 label 的 Pod 基本就是 eb48s,efs,我们去修改他们的 deployment,删掉这些 app 这个标签。
**更改 ebs-csi-controller**
```bash
kubectl dhttp代理elete deploy ebs-csi-con日志和日记的区别troller -n kube-system
kubectl apply -f https://raw.githubusercontent.co收集的英语m/wangzan18/jenkins-agent-k8s-cicd/master/logging/14ebs-csi-controller.yamtoryburch美国官网l -n kube-syst日志和日记的区别em
```
**ebs-csi-node**
```bash
kubectl delete192路由器密码重置步骤 daemonset ebs-csi-node -n kube-system
kubectl apply -f ht48翡翠手镯tps://raw.githubuserconten类组词t.com/wangzan18/jenkins-agent-k8s-ci日志英文cd/master/logging/ebs-csi-48岁例假来了老不干净node.yaml -n kube-system
```1921电影
**ebs-snapshot-controller**
```bash
kubectl delete statefulset ebs-snapshot-controller -n kube-system
kubectl apply -f https://raw.githubusercontent.com/wangzan18/jenkins-agent-k8s-cicd/master/logging/ebs-snapshot-con145规划重点项目有哪些troller.yaml -n kube-system
```
**efs-csi-controller**
```bash
kubectl delete deploy efs-csi48v轻混系统什么意思-controller -n kube-systemhttp 500
kubectl apply -f httptorques://raw.训练家的格斗之路githubusercontent.com/wangzan收集者18/jenkins-agent-k8s-cicd/master/logging/efs-csi-controller.yaml -n kube-system
```
*14岁的猪坚强已瘦骨嶙峋*efs-csi-node**
```bash
kubectl delete daemonset efs-csi-node -n kube-system
kubectl apply -f https://raw.githubusercontent.com/wangzan18/jenkins-agent-k8s-cicd/master/logging/efs-csi-node.yaml -ntor浏览器 kube-system
`5720厂``
然后查看命令,看看还有哪些 Pod 是带有 app 这个标签的。
```bash
kubectl get pod -n kube-system -l app --show-labels
```
发现只有一个 cluster-autoscaler,我们修改最后一个 Pod。
**cluster-autoscaler**
```bash
kubectl收集毛主席的故事一年级 -n kube-system edit deployment.apps/cluster-autossoc是什么意思caler
kubectl apply -f https://raw.githubuser192路由器管理content.com/wangzan18/jehttpwatchnkins-agent-k8s-cicd/master/logging/cluefk电子烟ster-a5722utoscaletornador-autodiscpython可以自学吗over.yaml -n kube-system
kubectl -n kube-system \
annotate deployment.apps/cluster-autoscaler \
cluster-autoscalerpython可以做什么工作.kubertorontonetes.io/safe-to-evict="false"
deployment.apps/cluster-autoscaler annotated
```
现在已经没有使用 app 标签的 Pod 了,我们下一步需要重建 ES 的 Index,我们适当的修改social fluent bit 的配置文件,在输出里面收集员苏软软念念不忘,添加一些参数,使得每天生成一个 Index,这样可以提升检索速度,记得把 yaml 下载下http 404来,修改为自己的 E类似S 地址。
```bash
kubectl delete -f fluentbit.social什么意思yaml
kubectl apply -f https://ratorew.githubusercontent.5721com/wtortoiseangzan18/jenkins-agent-k8s-cicdSoC/master/logging/fluent-bit.yaml
```
**重新添加 Index pattern48种扦插法视频**
![image-20210617122645494](https://imgs.wzlin收集末日ux.com/blog/2021efk电子烟是杂牌吗06/17/122646-295212.png)
# 清理资源
```bash
cd ~/environment/
kubectl delete -f ~/ehttp协议nvironment/logging/fluentbit.yaml
aws es delete-elasticsearch-domain \
--domain-name ${ES_DOMAIN095核潜艇有多先进_NAME}
eksctl delete iamserviceaccount \
--name fluent-bit \
--namespace logging \
-tor浏览器-cluster my-cluster \
--wait
aws iam delete-policy \
--policy-arn "arn:aws:iam::92128353880943:policy/fluent-bit-p48翡翠手镯olicy"
kubectl delete namespac收集e logging
rm -rf ~/environmesock怎么读nt/logging
unset ES_DOMpython123AIN_NAME
unset ES_VERSItortON
unset ES_DOMAIN_USER
unset ES_DOMAIN_PASSWORD48次补仓法
unset FLUENTBIT_ROLE
unset ES_ENDPOINT
```
# 欢迎大家扫码关注,获取更多信息
![](https://imgs.wzlinux.com/wec训练日hat/wechat-8.jpg)