首页 > 其他分享 >K8S:使用Filebeat收集K8S内Pod应用日志

K8S:使用Filebeat收集K8S内Pod应用日志

时间:2023-09-22 16:26:11浏览次数:49  
标签:filebeat name app Filebeat nginx Pod K8S 日志 log

之前是针对标准输出进行采集,现在来看一下针对于容器当中的日志,是在pod当中添加一个日志采集器,这里部署一个应用,单独部署一个容器,这个容器是filebeat日志采集器,这一块就通过emptydir来实现数据的共享。

filebeat的配置放在configmap当中,指明了日志采集的路径在哪,这个日志没有在标准输出当中,虽然是个nginx镜像。所以这里的日志还是存放在容器当中的。

apiVersion: apps/v1
kind: Deployment
metadata:
name: app-log-logfile
spec:
replicas: 3
selector:
matchLabels:
project: microservice
app: nginx-logfile
template:
metadata:
labels:
project: microservice
app: nginx-logfile
spec:
containers:
# 应用容器
- name: nginx
image: lizhenliang/nginx-php
# 将数据卷挂载到日志目录
volumeMounts:
- name: nginx-logs
mountPath: /usr/local/nginx/logs
# 日志采集器容器
- name: filebeat
image: elastic/filebeat:7.9.2
args: [
"-c", "/etc/filebeat.yml",
"-e",
]
resources:
requests:
cpu: 100m
memory: 100Mi
limits:
memory: 500Mi
securityContext:
runAsUser: 0
volumeMounts:
# 挂载filebeat配置文件
- name: filebeat-config
mountPath: /etc/filebeat.yml
subPath: filebeat.yml
# 将数据卷挂载到日志目录
- name: nginx-logs
mountPath: /usr/local/nginx/logs
# 数据卷共享日志目录
volumes:
- name: nginx-logs
emptyDir: {}
- name: filebeat-config
configMap:
name: filebeat-nginx-config
---
apiVersion: v1
kind: Service
metadata:
name: app-log-logfile
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
project: microservice
app: nginx-logfile
---
apiVersion: v1
kind: ConfigMap
metadata:
name: filebeat-nginx-config

data:
# 配置文件保存在ConfigMap
filebeat.yml: |-
filebeat.inputs:
- type: log
paths:
- /usr/local/nginx/logs/access.log
# tags: ["access"]
fields_under_root: true
fields:
project: microservice
app: nginx

setup.ilm.enabled: false
setup.template.name: "nginx-access"
setup.template.pattern: "nginx-access-*"

output.elasticsearch:
hosts: ['elasticsearch.ops:9200']
index: "nginx-access-%{+yyyy.MM.dd}"



#这里是给项目打上了标签,标明日志来源
fields:
project: microservice
app: nginx
[root@master elk]# kubectl run -it busybox --image=busybox:1.28.4 --rm sh
If you don't see a command prompt, try pressing enter.
/ # nslookup elasticsearch.ops
Server: 169.254.25.10
Address 1: 169.254.25.10

Name: elasticsearch.ops
Address 1: 10.233.51.153 elasticsearch.ops.svc.cluster.local
/ #


[root@master ~]# kubectl get svc -n ops
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
elasticsearch ClusterIP 10.233.51.153 <none> 9200/TCP 12h
kibana NodePort 10.233.17.6 <none> 5601:30601/TCP 12h
现在日志采集器采集到日志之后会推送到elastic里面

[root@master elk]# kubectl get pod -n ops
NAME READY STATUS RESTARTS AGE
app-log-logfile-75b98c44bd-dmkhn 2/2 Running 0 13m
elasticsearch-549b496f94-rzt85 1/1 Running 1 13h
filebeat-d9hm5 1/1 Running 1 13h
filebeat-j49lr 1/1 Running 1 13h
kibana-5c7bd6f4c5-ccnvt 1/1 Running 1 13h



[root@master elk]# kubectl get svc -n ops
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
app-log-logfile ClusterIP 10.233.1.237 <none> 80/TCP 15m
elasticsearch ClusterIP 10.233.51.153 <none> 9200/TCP 13h
kibana NodePort 10.233.17.6 <none> 5601:30601/TCP 13h


[root@master elk]# curl 10.233.1.237/status.html
ok
filebeat:
Container ID: docker://eeff7cfd77b7aebb62e5161e0828ea020b018fb2d92f84aae0df758a4d296e11
Image: elastic/filebeat:7.9.2
Image ID: docker-pullable://elastic/filebeat@sha256:4276cd8246821c085d1abb4547ab3bbb66f9f818e927a5270ffa1d4fb16ebead
Port: <none>
Host Port: <none>
Args:
-c
/etc/filebeat.yml
-e
State: Running
Started: Sat, 25 Sep 2021 11:09:39 +0800
Ready: True
Restart Count: 0
Limits:
memory: 500Mi
Requests:
cpu: 100m
memory: 100Mi
Environment: <none>
Mounts:
/etc/filebeat.yml from filebeat-config (rw,path="filebeat.yml")
/usr/local/nginx/logs from nginx-logs (rw)
/var/run/secrets/kubernetes.io/serviceaccount from default-token-sqqw5 (ro)




[root@master elk]# kubectl exec -it app-log-logfile-75b98c44bd-dmkhn -c filebeat -n ops sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
sh-4.2# cd /usr/local/nginx/logs
sh-4.2# ls
access.log error.log
sh-4.2# cat access.log
10.233.70.0 - - [25/Sep/2021:11:21:30 +0800] "GET / HTTP/1.1" 403 146 "-" "curl/7.29.0"
10.233.70.0 - - [25/Sep/2021:11:25:36 +0800] "GET / HTTP/1.1" 403 146 "-" "curl/7.29.0"
10.233.70.0 - - [25/Sep/2021:11:25:59 +0800] "GET /status.html HTTP/1.1" 200 3 "-" "curl/7.29.0"
可以看到索引了

 

project和app标志了项目的来源

 

所以,不同的应用名称索引名称和标签都需要修改!

output.elasticsearch:
hosts: ['elasticsearch.ops:9200']
index: "nginx-access-%{+yyyy.MM.dd}"

fields:
project: microservice
app: nginx
namespace: ops
deployment: app-log-logfile

文章知识点与官方知识档案匹配,可进一步学习相关知识
云原生入门技能树首页概览15272 人正在系统学习中
————————————————
版权声明:本文为CSDN博主「富士康质检员张全蛋」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34556414/article/details/120468826

标签:filebeat,name,app,Filebeat,nginx,Pod,K8S,日志,log
From: https://www.cnblogs.com/cheyunhua/p/17722639.html

相关文章

  • k8s-网络
    service将运行在一组pods上的应用程序公开为网络服务的抽象方法kubernetes为pods提供自己的ip地址,并为一组pod提供相同的DNS名,并且可以在他们之间进行负载均衡访问service的ip地址就能获取pod的内容ingressingress是对集群中服务的外部访问进行管理的API对象,典型的访问方式是......
  • k8s-调度单元pod
    podpod的共享上下文包括一组linux名字空间、控制组和可能一些其他的隔离方面,即用来隔离docker容器的技术。Pod 是可以在Kubernetes中创建和管理的、最小的可部署的计算单元。pod的生命周期pending:挂起running:运行succeeded:成功failed:失败unknown:未知waiting:等待runni......
  • k8s-概念
    Kubernetes是一个开源的容器编排引擎,用来对容器化应用进行自动化部署、扩缩和管理。该项目托管在 CNCF。 什么时候用到kubernetes?1、当你的应用时微服务架构2、开发者需要快速部署自己的新功能到测试环境进行验证3、降低硬件资源成本,提高使用率......
  • k8s-常用命令
    1、集群管理命令     kubectlgetnodes:列出集群中的节点。  kubectlcluster-info:显示集群的基本信息。  kubectldescribenode<node_name>:显示节点的详细信息。2、命名空间管理命令kubectlgetnamespaces:列出所有命名空间。kubectlcreatenam......
  • k8s部署mongodb 测试
    挂载mongodb配置文件的cm[root@master01kx]#catmongodb-config.yamlapiVersion:v1kind:ConfigMapmetadata:name:mongo-config-producenamespace:chongqinglabels:app:mongo-producedata:mongodb.conf:|-dbpath=/data/middleware-data/mongo......
  • Docker学习第十天——k8s之ReplicaSet及Deployment
    原文:https://blog.csdn.net/qq_39637333/article/details/130686963一、ReplicaSetReplicaSet,即副本控制器,简称rs,主要作用是控制由其管理的pod,使pod副本的数量始终维持在预设的个数,保证一定数量的Pod能够在集群中正常运行,它会持续监听这些Pod的运行状态,在Pod发生故障时重......
  • CocoaPods 在iOS开发中养活了这么多项目,它到底是个啥? | 京东云技术团队
    对于iOS开发者而言,CocoaPods并不陌生,通过pod相关的命令操作,就可以很方便的将项目中用到的三方依赖库资源集成到项目环境中,大大的提升了开发的效率。CocoaPods作为iOS项目的包管理工具,它在命令行背后做了什么操作?而又是通过什么样的方式将命令指令声明出来供我们使用的?这些实现的背......
  • CocoaPods 在iOS开发中养活了这么多项目,它到底是个啥?
    对于iOS开发者而言,CocoaPods并不陌生,通过pod相关的命令操作,就可以很方便的将项目中用到的三方依赖库资源集成到项目环境中,大大的提升了开发的效率。CocoaPods作为iOS项目的包管理工具,它在命令行背后做了什么操作?而又是通过什么样的方式将命令指令声明出来供我们使用的?这些实现的背......
  • 记一次pod被大量驱逐问题处理
    记一次pod被大量驱逐问题处理1、现象描述业务侧反馈在白屏界面同一应用存在大量实例,且状态为Evicted,黑屏查看缺少存在大量被驱逐pod,先将其delete掉,过了一个周末又出现大量被驱逐2、问题排查#describepod查看pod事件,发现evnets为空,查看message发现为磁盘压力大,记录pod所......
  • K8s部署Nacos 2.0.3集群模式(外置mysql数据库)
    来源:https://www.woniusnail.com/?p=1691Nacos 具体介绍就不介绍了,详细的官方都有。本次主要介绍在k8s集群中部署Nacos集群(3节点),数据库使用外置的mysql,相比使用官方的在k8s内创建数据库的方案维护更方便,所有nacos配置全部保存在数据库中,不用担心重启掉线等异常导致配置文......