今年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统一收集应用日志相关推荐

  1. filebeat+logstash收集错误日志发送邮件提醒

    filebeat+logstash收集错误日志发送邮件提醒 典型ELK应用架构 因为只收集错误日志并且数据量并不是非常大所以简化流程 使用filebeat+logstash发送异常日志 软件 版本 说 ...

  2. K8S 使用 SideCar 模式部署 Filebeat 收集容器日志

    推荐阅读 Helm3(K8S 资源对象管理工具)视频教程:https://edu.csdn.net/course/detail/32506 Helm3(K8S 资源对象管理工具)博客专栏:https: ...

  3. Kubernetes部署(七):k8s项目交付----(4)日志收集

    介绍 日志,对于任何系统来说都是及其重要的组成部分.在计算机系统里面,更是如此.但是由于现在的计算机系统大多比较复杂,很多系统都不是在一个地方,甚至都是跨国界的:即使是在一个地方的系统,也有不同的来源 ...

  4. filebeat收集java日志_filebeat采集多个项目日志 | 吴老二

    filebeat采集的日志内容包含java项目的和nginx日志,前期规划不同服务的日志路径应该进行区分.我们这里没有区分,java项目的日志和nginx的日志都存在一个路径下,导致在收集日志的时候, ...

  5. 部署filebeat收集nginx日志

    搭建filebeat自动发现日志 在上一篇博客我们部署了logstash去读取日志,但是logstash需要消耗的资源较大.在每台客户端安装logstash不现实. Filebeat是一个轻量级的日志 ...

  6. 使用Log-Pilot + logstash+Elasticsearch + Kibana 收集 kubernetes 日志

    开发者在面对 Kubernetes 分布式集群下的日志需求时,常常会感到头疼,既有容器自身特性的原因,也有现有日志采集工具的桎梏,主要包括: 容器本身特性: 采集目标多:容器本身的特性导致采集目标多, ...

  7. ES Filebeat 使用 Pipeline 处理日志中的 @timestamp

    推荐阅读 Helm3(K8S 资源对象管理工具)视频教程:https://edu.csdn.net/course/detail/32506 Helm3(K8S 资源对象管理工具)博客专栏:https: ...

  8. ELK分布式日志收集-企业级日志中心

    传统项目中,如果需要在生产环境定位异常的话,我们常常需要在服务器上使用命令的方式查询.而很多情况我们需要用到微服务架构或集群架构,日志被分散在不同的机器上,使得日志的查询变得异常困难.工欲善其事,必先 ...

  9. Graylog收集nginx日志做地图事态感知

    文章目录 这个东西有什么用呢 搜集日志的过程如下图 开始部署 在客户端安装 Sidecar 在客户端安装 Filebeat 在Server服务端添加Sidecar 通过Nginx日志做地图标识 这个东 ...

最新文章

  1. 给Python代码加上酷炫进度条的几种姿势
  2. golang二维数组初始化
  3. SAP系统内部顾问如何培养
  4. 一个字符串中到底能有多少个字符? 我竟然算错了!
  5. SpringBoot中@EventListener注解的使用
  6. Windows10 手机应用程序开发 - 3. 做一个简单的计算器界面
  7. day02-java关键字
  8. html5中的css特性,浅谈HTML5 CSS3的新交互特性
  9. HDUOJ---The number of divisors(约数) about Humble Numbers
  10. java 遍历循环_如何在Java中实现循环遍历?
  11. 15数码 java_A*算法求解15数码问题
  12. 两台服务器安装redis集群_两台服务器六节点redis集群环境搭建
  13. 高仿QQ举报网页和举报成功网站页源码
  14. iOS的iPhone最全尺寸、分辨率、PPI、Reader总结(包括XS、XS Max、XR)
  15. 全球最大照片网站 Unsplash 开放图片检索数据集
  16. 移动智能时代,为何还需要猎网平台?
  17. 剑指offer之数组中重复的数(Java实现)
  18. 将图片表格转化为excel的方法
  19. 如何做擦能防止网站被劫持
  20. 开发者周刊:英特尔再爆重大芯片漏洞;微软开源Bing搜索关键算法;Facebook联合创始人呼吁拆分Facebook

热门文章

  1. 蓝桥杯 ALGO-50 算法训练 数组查找及替换
  2. 戴明理论、朱兰理论、克鲁斯比理论和田口玄一理论
  3. 微型计算机基础知识,微型计算机的基础知识
  4. zookeeper启动失败的排错 no route to host 防火墙未关闭导致的
  5. TUXEDO配置常见问题及解决方法
  6. 代码快速“检”“修”不是梦,阿里云MaxCompute Studio 2.9.0 新版本发布
  7. p1198bzoj1012 最大数
  8. 【权限设计】一个案例,三个角色,简单说下B端产品的权限设计
  9. GNS3 1.5.2 无法上传文件的解决办法
  10. java 读取使用keytool生产的keystore文件