K8S使用filebeat统一收集应用日志
今年3月份在公司的内部k8s培训会上,开发同事对应用整合进pod提出了几个问题,主要围绕在java应用的日志统一收集、集中存放和java jvm内存监控数据收集相关的点上,本文将介绍使用filebeat实现pod日志的统一收集,集中存放使用集群外的elasticsearch,后续可以加上kibana及模板文件实现更友好的数据展示。
一、准备和测试tomcat基础镜像
该镜像主要是配置jdk环境变量和tomcat软件包部署,如果有特殊的需求,例如安装其他软件包、配置tomcat https等也可以在dockerfile里面实现。之后如果有对jdk和tomcat进行统一升级,更新基础镜像即可。
1、dockerfile编译镜像并推送到本地仓库
# docker pull centos
# cd tomcat/
# ls
# cat dockerfile
FROM centos
MAINTAINER yangliangwei "ylw@fjhb.cn"
WORKDIR /home
COPY java1.8.tgz /home/
RUN tar zxf /home/java1.8.tgz -C /usr/local/ && rm -rf /home/java1.8.tgz
ENV JAVA_HOME /usr/local/java/
ENV CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
COPY apache-tomcat-7.0.86.tar.gz /home/
RUN tar zxf apache-tomcat-7.0.86.tar.gz -C /home && rm -rf /home/apache-tomcat-7.0.86.zip
RUN mv /home/apache-tomcat-7.0.86 /home/tomcat
EXPOSE 8080
ENTRYPOINT /home/tomcat/bin/startup.sh && tail -f /home/tomcat/logs/catalina.out
# docker build -t tomcat_base:v1.0 .
# docker tag tomcat_base:v1.0 registry.59iedu.com
# docker push registry.59iedu.com/tomcat_base:v1.0
2、其他docker主机通过本地仓库下载镜像run测试
# docker pull registry.59iedu.com/tomcat_base:v1.0
# docker run -idt --name tomcat_test -p 8889:8080 registry.59iedu.com/tomcat_base:v1.0
# curl http://localhost:8889
二、在基础镜像上叠加app并推送到本地仓库
这里选择使用shopxx java开源项目来做模拟java app,将部署的shopxx打包好放入指定位置即可运行。为了简单,这里选择Shopxx调用的数据库放在k8s集群之外,只要pod网络可以正常访问即可。
# cd shopxx
# cat dockerfile
FROM registry.59iedu.com/tomcat_base:v1.0
MAINTAINER yangliangwei "ylw@fjhb.cn"
COPY ROOT.tgz /home/
RUN tar zxf /home/ROOT.tgz -C /home/tomcat/webapps/ && rm -rf /home/ROOT.tgz# docker build -t tomcat_shopxx:v1 .
# docker tag tomcat_shopxx:v1 registry.59iedu.com/tomcat_shopxx:v1
# docker push registry.59iedu.com/tomcat_shopxx:v1
三、准备filebeat镜像
Filebeat容器主要负责将app容器里面的日志推送到elasticsearch, 为了降低耦合度及后续的维护难度,创建filebeat容器的时候将filebeat.yml配置文件以configmap的方式实现。所以在镜像编译部分不考虑filebeat.yml配置文件
# cd filebeat-v5.4.0/
# ls -lh
# cat dockerfile
FROM docker.io/centos
MAINTAINER YangLiangWei <ylw@fjhb.cn># Install Filebeat
WORKDIR /usr/local
COPY filebeat-5.4.0-linux-x86_64.tar.gz /usr/local
RUN cd /usr/local && \tar xvf filebeat-5.4.0-linux-x86_64.tar.gz && \rm -f filebeat-5.4.0-linux-x86_64.tar.gz && \ln -s /usr/local/filebeat-5.4.0-linux-x86_64 /usr/local/filebeat && \chmod +x /usr/local/filebeat/filebeat && \mkdir -p /etc/filebeatADD ./docker-entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/docker-entrypoint.shENTRYPOINT ["docker-entrypoint.sh"]CMD ["/usr/local/filebeat/filebeat","-e","-c","/etc/filebeat/filebeat.yml"]
# cat docker-entrypoint.sh
#!/bin/bash
config=/etc/filebeat/filebeat.yml
env
echo 'Filebeat init process done. Ready for start up.'
echo "Using the following configuration:"
cat /etc/filebeat/filebeat.yml
exec "$@"
# docker build -t filebeat-v5.4.0 .
# docker tag filebeat-v5.4.0 registry.59iedu.com/filebeat:v5.4.0
# docker push registry.59iedu.com/filebeat:v5.4.0
四、准备yaml配置文件
1、tomcat.yaml文件
一个POD里面运行两个容器,两个容器通过emptydir的方式共享/home/tomcat/logs目录下的日志文件。Filebeat的配置文件通过configmap方式挂载进容器
# cat tomcat.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:name: tomcat-shopxxnamespace: default
spec:replicas: 1template:metadata:labels:k8s-app: tomcat-shopxxspec:containers:- image: registry.59iedu.com/filebeat:v5.4.0imagePullPolicy: Alwaysname: filebeatvolumeMounts:- name: app-logsmountPath: /log- name: filebeat-configmountPath: /etc/filebeat/- image: registry.59iedu.com/tomcat_shopxx:v1name : tomcat-shopxximagePullPolicy: Alwaysports:- containerPort: 8080volumeMounts:- name: app-logsmountPath: /home/tomcat/logsvolumes:- name: app-logsemptyDir: {}- name: filebeat-configconfigMap:name: filebeat-config
2、configamp.yaml
通过configmap的形式创建filebeat.yml配置文件,指定收集日志的路径、elasticsearch的配置信息及索引名称
# cat configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: filebeat-config
data:filebeat.yml: |filebeat.prospectors:- input_type: logpaths:- "/var/log/yum.log"- "/log/*"output.elasticsearch:hosts: ["192.168.1.19:9600"]index: "filebeat-tomcat-shopxx"
3、service.yaml文件
通过service.yaml文件将shopxx发布出去
# cat service.yaml
apiVersion: v1
kind: Service
metadata:name: tomcat-shopxxlabels:k8s-app: tomcat-shopxx
spec:type: NodePortports:- port: 8080protocol: TCPtargetPort: 8080name: httpnodePort: 8480selector:k8s-app: tomcat-shopxx
五、通过yaml配置文件创建pod、configmap、service
# kubectl create -f .
# kubectl get pod
# kubectl get svc
# kubectl get deployment
六、测试与验证
Filebeat容器日志:
Shopxx容器日志:
使用elasticsearch-head插件查看对应的索引:
访问web测试:
K8S使用filebeat统一收集应用日志相关推荐
- filebeat+logstash收集错误日志发送邮件提醒
filebeat+logstash收集错误日志发送邮件提醒 典型ELK应用架构 因为只收集错误日志并且数据量并不是非常大所以简化流程 使用filebeat+logstash发送异常日志 软件 版本 说 ...
- K8S 使用 SideCar 模式部署 Filebeat 收集容器日志
推荐阅读 Helm3(K8S 资源对象管理工具)视频教程:https://edu.csdn.net/course/detail/32506 Helm3(K8S 资源对象管理工具)博客专栏:https: ...
- Kubernetes部署(七):k8s项目交付----(4)日志收集
介绍 日志,对于任何系统来说都是及其重要的组成部分.在计算机系统里面,更是如此.但是由于现在的计算机系统大多比较复杂,很多系统都不是在一个地方,甚至都是跨国界的:即使是在一个地方的系统,也有不同的来源 ...
- filebeat收集java日志_filebeat采集多个项目日志 | 吴老二
filebeat采集的日志内容包含java项目的和nginx日志,前期规划不同服务的日志路径应该进行区分.我们这里没有区分,java项目的日志和nginx的日志都存在一个路径下,导致在收集日志的时候, ...
- 部署filebeat收集nginx日志
搭建filebeat自动发现日志 在上一篇博客我们部署了logstash去读取日志,但是logstash需要消耗的资源较大.在每台客户端安装logstash不现实. Filebeat是一个轻量级的日志 ...
- 使用Log-Pilot + logstash+Elasticsearch + Kibana 收集 kubernetes 日志
开发者在面对 Kubernetes 分布式集群下的日志需求时,常常会感到头疼,既有容器自身特性的原因,也有现有日志采集工具的桎梏,主要包括: 容器本身特性: 采集目标多:容器本身的特性导致采集目标多, ...
- ES Filebeat 使用 Pipeline 处理日志中的 @timestamp
推荐阅读 Helm3(K8S 资源对象管理工具)视频教程:https://edu.csdn.net/course/detail/32506 Helm3(K8S 资源对象管理工具)博客专栏:https: ...
- ELK分布式日志收集-企业级日志中心
传统项目中,如果需要在生产环境定位异常的话,我们常常需要在服务器上使用命令的方式查询.而很多情况我们需要用到微服务架构或集群架构,日志被分散在不同的机器上,使得日志的查询变得异常困难.工欲善其事,必先 ...
- Graylog收集nginx日志做地图事态感知
文章目录 这个东西有什么用呢 搜集日志的过程如下图 开始部署 在客户端安装 Sidecar 在客户端安装 Filebeat 在Server服务端添加Sidecar 通过Nginx日志做地图标识 这个东 ...
最新文章
- 给Python代码加上酷炫进度条的几种姿势
- golang二维数组初始化
- SAP系统内部顾问如何培养
- 一个字符串中到底能有多少个字符? 我竟然算错了!
- SpringBoot中@EventListener注解的使用
- Windows10 手机应用程序开发 - 3. 做一个简单的计算器界面
- day02-java关键字
- html5中的css特性,浅谈HTML5 CSS3的新交互特性
- HDUOJ---The number of divisors(约数) about Humble Numbers
- java 遍历循环_如何在Java中实现循环遍历?
- 15数码 java_A*算法求解15数码问题
- 两台服务器安装redis集群_两台服务器六节点redis集群环境搭建
- 高仿QQ举报网页和举报成功网站页源码
- iOS的iPhone最全尺寸、分辨率、PPI、Reader总结(包括XS、XS Max、XR)
- 全球最大照片网站 Unsplash 开放图片检索数据集
- 移动智能时代,为何还需要猎网平台?
- 剑指offer之数组中重复的数(Java实现)
- 将图片表格转化为excel的方法
- 如何做擦能防止网站被劫持
- 开发者周刊:英特尔再爆重大芯片漏洞;微软开源Bing搜索关键算法;Facebook联合创始人呼吁拆分Facebook
热门文章
- 蓝桥杯 ALGO-50 算法训练 数组查找及替换
- 戴明理论、朱兰理论、克鲁斯比理论和田口玄一理论
- 微型计算机基础知识,微型计算机的基础知识
- zookeeper启动失败的排错 no route to host 防火墙未关闭导致的
- TUXEDO配置常见问题及解决方法
- 代码快速“检”“修”不是梦,阿里云MaxCompute Studio 2.9.0 新版本发布
- p1198bzoj1012 最大数
- 【权限设计】一个案例,三个角色,简单说下B端产品的权限设计
- GNS3 1.5.2 无法上传文件的解决办法
- java 读取使用keytool生产的keystore文件