首页 > 其他分享 >八、实战案例之基于ELK实现容器日志收集与展示

八、实战案例之基于ELK实现容器日志收集与展示

时间:2023-04-20 15:12:21浏览次数:45  
标签:ELK tomcat 容器 -- app1 linux39 日志 root localhost7C

kubernetes实战案例之基于ELK实现容器日志收集与展示实现pod中日志收集之至ELK,自定义字段数据格式转换、排序、基于日志实现pod自愈、自动扩容等 

收集日志的方法:
    1、通过DaemonSet在宿主机启动日志收集客户端Fluentd、logstash、filebeat
        -v 选项把宿主机的日志挂载容器里,在容器把日志收集到ES
        配置较多
        
    2、手动安装日志收集客户端
        手动配置
        
    3、在pod内置一个filebeat
        配置简单
            在容器里面启动一个filebeat进程
            在pod再启动一个filebeat容器
    
实战:存取取数据库filebeat  -- redis -- logstat -- ELK
 
 
 
1.安装es服务器和插件: https://www.cnblogs.com/Yuanbangchen/p/16984995.html

2.安装redis服务器:https://www.cnblogs.com/Yuanbangchen/p/17275460.html

3-7步骤参考:https://www.cnblogs.com/Yuanbangchen/p/17264215.html
3.镜像构建,对初始镜像进行基础软件安装,此镜像为nginx tomcat jdk的基本镜像  安装日志收集工具filebeat
[root@localhost7C centos]# ll
-rw-r--r-- 1 root root      174 4月   7 2020 build-command.sh
-rw-r--r-- 1 root root      503 4月   9 2020 Dockerfile
-rw-r--r-- 1 root root 24694569 4月   7 2020 filebeat-7.6.1-x86_64.rpm

[root@localhost7C centos]# cat Dockerfile 
#自定义Centos 基础镜像
from from harbor.zzhz.com/baseimages/centos:7.6.1810 
LABEL MAINTAINER="[email protected]"
ADD filebeat-7.6.1-x86_64.rpm /tmp
RUN yum install -y /tmp/filebeat-7.6.1-x86_64.rpm vim wget tree  lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel \ 
openssl openssl-devel iproute net-tools iotop &&  rm -rf /etc/localtime /tmp/filebeat-7.6.1-x86_64.rpm \
&& ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && useradd  nginx -u 2019 && useradd www -u 2020

#harbor先创建/baseimages项目
[root@localhost7C centos]# cat build-command.sh 
#!/bin/bash
docker build -t  harbor.zzhz.com/baseimages/magedu-centos-base:7.6.1810  .

docker push harbor.zzhz.com/baseimages/magedu-centos-base:7.6.1810

#执行构造
[root@localhost7C centos]# chmod  +x build-command.sh 
[root@localhost7C centos]# ./build-command.sh




4.基于基础的centos镜像 harbor.zzhz.com/baseimages/magedu-centos-base:7.6.1810,制作公司内部基础镜像--jdk镜像

[root@localhost7C jdk-1.8.212]# ll
-rw-r--r-- 1 root root       138 3月  28 15:38 build-command.sh
-rw-r--r-- 1 root root       388 3月  28 15:36 Dockerfile
-rw-r--r-- 1 root root 195013152 4月   7 2020 jdk-8u212-linux-x64.tar.gz
-rw-r--r-- 1 root root      2128 3月  28 15:39 profile

[root@localhost7C jdk-1.8.212]# cat Dockerfile 
#JDK Base Image
FROM harbor.zzhz.com/baseimages/magedu-centos-base:7.6.1810
MAINTAINER zhangshijie "[email protected]"

ADD jdk-8u212-linux-x64.tar.gz /usr/local/src/
RUN ln -sv /usr/local/src/jdk1.8.0_212 /usr/local/jdk 
ADD profile /etc/profile

ENV JAVA_HOME /usr/local/jdk
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/:$JRE_HOME/lib/
ENV PATH $PATH:$JAVA_HOME/bin



[root@localhost7C jdk-1.8.212]# cat build-command.sh 
#!/bin/bash
docker build -t harbor.zzhz.com/pub-images/jdk-base:v8.212  .
sleep 1
docker push  harbor.zzhz.com/pub-images/jdk-base:v8.212


#profile文件的来源:使用docker 运行一个临时容器复制出来。
[root@localhost7C jdk-1.8.212]# cat profile 
 ....
 ....
 ....
unset i
unset -f pathmunge
export LANG=en_US.UTF-8
export HISTTIMEFORMAT="%F %T `whoami` "

#主要是这几行。
export JAVA_HOME=/usr/local/jdk
export TOMCAT_HOME=/apps/tomcat
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$TOMCAT_HOME/bin:$PATH
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar


#执行构造
[root@localhost7C jdk-1.8.212]# chmod  +x build-command.sh 
[root@localhost7C jdk-1.8.212]# ./build-command.sh

#测试
[root@localhost7C jdk-1.8.212]# docker run  -it --rm  harbor.zzhz.com/pub-images/jdk-base:v8.212 bash
[root@5cd43e965b82 /]# java  -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)




5.基于jdk镜像制作tomcat基础镜像
[root@localhost7C tomcat-base-8.5.43]# ll
-rw-r--r-- 1 root root 9717059 4月   7 2020 apache-tomcat-8.5.43.tar.gz
-rw-r--r-- 1 root root     146 3月  28 15:48 build-command.sh
-rw-r--r-- 1 root root     341 3月  28 15:48 Dockerfile


[root@localhost7C tomcat-base-8.5.43]# cat Dockerfile 
#Tomcat 8.5.43基础镜像
FROM harbor.zzhz.com/pub-images/jdk-base:v8.212 
MAINTAINER zhangshijie "[email protected]"
RUN mkdir /apps /data/tomcat/webapps /data/tomcat/logs -pv 
ADD apache-tomcat-8.5.43.tar.gz  /apps
RUN useradd tomcat -u 2021 && ln -sv /apps/apache-tomcat-8.5.43 /apps/tomcat && chown -R nginx.nginx /apps /data -R


[root@localhost7C tomcat-base-8.5.43]# cat build-command.sh 
#!/bin/bash
docker build -t harbor.zzhz.com/pub-images/tomcat-base:v8.5.43  .
sleep 3
docker push  harbor.zzhz.com/pub-images/tomcat-base:v8.5.43


[root@localhost7C tomcat-base-8.5.43]# chmod +x build-command.sh 
[root@localhost7C tomcat-base-8.5.43]# ./build-command.sh 


#测试访问tomcat基础镜像启动为容器:
[root@localhost7C tomcat-base-8.5.43]# docker run -it --rm -p 8801:8080  harbor.zzhz.com/pub-images/tomcat-base:v8.5.43  bash
[root@cfb5972b39ac /]# /apps/tomcat/bin/catalina.sh  start
Using CATALINA_BASE:   /apps/tomcat
Using CATALINA_HOME:   /apps/tomcat
Using CATALINA_TMPDIR: /apps/tomcat/temp
Using JRE_HOME:        /usr/local/jdk/jre
Using CLASSPATH:       /apps/tomcat/bin/bootstrap.jar:/apps/tomcat/bin/tomcat-juli.jar
Tomcat started.

[root@cfb5972b39ac /]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.1  11824  1924 pts/0    Ss   15:52   0:00 bash
root         23 63.4  4.9 3999372 91544 pts/0   Sl   15:53   0:03 /usr/local/jdk/jre/bin/java -Djava.util.logging.config.file=/apps/tomcat/conf/logging.properties -Djava.util.logging.manage
root         73  0.0  0.0  51748  1732 pts/0    R+   15:53   0:00 ps aux


#测试
[root@localhost7K ~]# curl 192.168.80.120:8801




6.tomcat业务镜像:tomcat业务镜像app1制作,后期按此步骤制作app2、appN镜像
[root@localhost7C linux39]# cd tomcat-app1/
[root@localhost7C tomcat-app1]# ll
-rwxr-xr-x 1 root root   165 4月   7 2020 build-command.sh
-rwxr-xr-x 1 root root 23611 4月   7 2020 catalina.sh  
-rw-r--r-- 1 root root   548 4月   9 2020 Dockerfile
-rw-r--r-- 1 root root   416 4月   9 2020 filebeat.yml
-rw-r--r-- 1 root root    12 4月   7 2020 index.html
-rw-r--r-- 1 root root   266 4月   9 2020 myapp.tar.gz
-rwxr-xr-x 1 root root   556 4月   9 2020 run_tomcat.sh
-rw-r--r-- 1 root root  6460 4月   7 2020 server.xml    



[root@localhost7C tomcat-app1]# cat Dockerfile 
#tomcat web1
FROM harbor.zzhz.com/pub-images/tomcat-base:v8.5.43 
ADD catalina.sh /apps/tomcat/bin/catalina.sh
ADD server.xml /apps/tomcat/conf/server.xml
#ADD myapp/* /data/tomcat/webapps/myapp/
ADD myapp.tar.gz /data/tomcat/webapps/myapp/
ADD run_tomcat.sh /apps/tomcat/bin/run_tomcat.sh
ADD filebeat.yml /etc/filebeat/filebeat.yml 
RUN mkdir /data/tomcat/webapps/myapp/images  /data/tomcat/webapps/myapp/static -p
RUN chown  -R nginx.nginx /data/ /apps/ 
EXPOSE 8080 8443
CMD ["/apps/tomcat/bin/run_tomcat.sh"]


[root@localhost7C tomcat-app1]# cat index.html 
tomcat app1



#收集工具配置文件
[root@localhost7C tomcat-app1]# cat filebeat.yml 
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /apps/tomcat/logs/catalina.out
  fields:
    type: k8s-tomcat-catalina

filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
setup.template.settings:
  index.number_of_shards: 1

output.redis:
  hosts: ["srv-devops-redis.magedu.svc.zzhz.local:6379"]  #redis地址
  key: "k8s-linux39-myapp"
  db: 1
  timeout: 5
  password: "123456"



#启动文件
[root@localhost7C tomcat-app1]# cat run_tomcat.sh 
#!/bin/bash
/usr/share/filebeat/bin/filebeat -e -c /etc/filebeat/filebeat.yml -path.home /usr/share/filebeat -path.config /etc/filebeat -path.data /var/lib/filebeat -path.logs /var/log/filebeat &
su - nginx -c "/apps/tomcat/bin/catalina.sh start"
tail -f /etc/hosts

[root@localhost7C tomcat-app1]# cat server.xml 
其它省略
<Host name="localhost"  appBase="/data/tomcat/webapps"  unpackWARs="true" autoDeploy="true">





[root@localhost7C tomcat-app1]# cat build-command.sh 
#!/bin/bash
TAG=$1
docker build -t  harbor.zzhz.com/linux39/tomcat-app1:${TAG} .
sleep 3
docker push  harbor.zzhz.com/linux39/tomcat-app1:${TAG}




#重点,所有脚本要执行权限。
[root@localhost7C tomcat-app1]# chmod +x *.sh
[root@localhost7C tomcat-app1]# ./build-command.sh  2022-02-22


#测试访问tomcat基础镜像启动为容器:
[root@localhost7C tomcat-app1]#docker run -it --rm -p 8801:8080 harbor.zzhz.com/linux39/tomcat-app1:2022-02-22

[root@localhost7K ~]# curl  192.168.80.120:8801/myapp/index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>马哥教育</title>
</head>
<body>
    <h1>linux39 myapp v1</h1>
    <h1>linux39 myapp v2</h1>
</body>
</html>




7.在k8s环境创建tomcat业务pod
[root@localhost7C tomcat-app1]# cat tomcat-app1.yaml 
kind: Deployment
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
metadata:
  labels:
    app: linux39-tomcat-app1-deployment-label
  name: linux39-tomcat-app1-deployment
  namespace: linux39
spec:
  replicas: 1
  selector:
    matchLabels:
      app: linux39-tomcat-app1-selector
  template:
    metadata:
      labels:
        app: linux39-tomcat-app1-selector
    spec:
      containers:
      - name: linux39-tomcat-app1-container
        image: harbor.zzhz.com/linux39/tomcat-app1:2022-04-14
        #command: ["/apps/tomcat/bin/run_tomcat.sh"]
        #imagePullPolicy: IfNotPresent
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
          protocol: TCP
          name: http
        env:
        - name: "password"
          value: "123456"
        - name: "age"
          value: "18"
        resources:
          limits:
            cpu: 1
            memory: "512Mi"
          requests:
            cpu: 500m
            memory: "512Mi"
        volumeMounts:
        - name: linux39-images
          mountPath: /data/tomcat/webapps/myapp/images
          readOnly: false
        - name: linux39-static
          mountPath: /data/tomcat/webapps/myapp/static
          readOnly: false
      volumes:
      - name: linux39-images
        nfs:
          server: 192.168.80.110
          path: /data/linux39/images
      - name: linux39-static
        nfs:
          server: 192.168.80.110
          path: /data/linux39/static
      #nodeSelector:
      #  project: linux39
---
kind: Service
apiVersion: v1
metadata:
  labels:
    app: linux39-tomcat-app1-service-label
  name: linux39-tomcat-app1-service
  namespace: linux39
spec:
  type: NodePort
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 8080
    nodePort: 30003
  selector:
    app: linux39-tomcat-app1-selector
[root@localhost7C tomcat-app1]# kubectl apply  -f tomcat-app1.yaml 

访问测试:tomcat产生数据库

8.logstash服务器配置文件
[root@localhost7I ]# cat /etc/logstash/conf.d/log.conf 
input {
    redis {
      host => "192.168.80.150"
      port => "36379"
      db => 1
      password => "123456"
      data_type => "list"
      key => "k8s-linux39-myapp"
    }
}

output {
   if [fields][type] == "k8s-tomcat-catalina" {
    elasticsearch {
      hosts => ["192.168.80.190:9200"]
      index => "k8s-linux39-tomcat-myapp-catalina-outlog-%{+YYYY.MM.dd}"
    }      
   }
}


9测试: 使用 head cerebro kibana等工具查看。

 

 

 

标签:ELK,tomcat,容器,--,app1,linux39,日志,root,localhost7C
From: https://www.cnblogs.com/Yuanbangchen/p/17336931.html

相关文章

  • 3 02 | 日志系统:一条SQL更新语句是如何执行的?
    前面我们系统了解了一个查询语句的执行流程,并介绍了执行过程中涉及的处理模块。相信你还记得,一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块,最后到达存储引擎。那么,一条更新语句的执行流程又是怎样的呢?之前你可能经常听DBA同事说,MySQL可以恢复到半......
  • docker,给容器重新分配显卡
    docker容器已创建成功,若想修改映射GPU数量,除了重新创建一个容器外,还可以修改容器的配置文件来达到修改的目的。关闭docker服务(不关闭修改后会自动恢复)systemctlstopdocker找到你要修改容器的id,我的容器id为“9d676d24c4f8367357658f7329afa026840d7a5ed8fb9f26918922d0c004......
  • docker镜像与容器基本的基本操作
    一、docker基本命令(运维版)1、查看镜像——dockerimages#查看下载到本地的所有镜像dockerimages​​REPOSITORY TAG   IMAGEID   CREATED  SIZEnginx   latest ae2feff98a0c 9daysago 133MB------------------------------------......
  • crontab 任务日志
    评:crontab是Linux下最常用的计划任务服务。本文跟大家分享一下有关linuxcrontab日志存放的一些心得,希望本文能教会你更多东西。默认情况下,crontab中执行的日志写在/var/log下,如:#ls/var/log/cron*/var/log/cron/var/log/cron.1/var/log/cron.2......
  • windows server 的日志手动筛选xml如何学习编写
    如何编写WindowsServer的日志筛选器,你需要先了解以下概念:1、WindowsEventLog:WindowsEventLog是WindowsServer操作系统提供的一种记录系统事件的机制,它可以记录操作系统、应用程序、安全、系统和其他类型的事件。2、EventViewer:EventViewer是Windows操作系统提供......
  • elasticsearch 8集群搭建并完成CDN日志收集和解析
     谷歌一下,搜索结果有各种样的博客文章,看了很多篇,反而被绕晕,经过自己的实践搭建完成获取到的经验最适合自己,在这里把整个过程记录下来,也希望可以帮助到一些需要的人。搭建前,请阅读官方文档,虽然是英文,如果能看懂你能学到更精髓的部分。英文好坏也是技术和技术之间的分水岭。好的技......
  • ELK日志分析系统
    拓扑图:推荐步骤:搭建ElaticSearch群集,通过浏览器查看和图形管理群集配置客户端装apache和logstash服务配置采集apache日志配置kibana监听elasticsearch服务器日志实验步骤:一、搭建Elaticsearch群集,通过浏览器查看和图形管理群集1、配置第一台Elaticsearch服务器(1)修改hosts文件复制......
  • 挖/填坑日志
    我是挖坑大师!写一点做了但是没有完全做完的事情:小说(框架搭建了一堆,but实际本上只有三个案子,网文甚至没更到那个阶段())第二本小说啊对对对其实曾经干过一个时间干两本小说的,但是一本在无名作文本上丢了,还好没有更很多()Witness_C++模拟器可以来这个地方看进度,有进展会更新Natu......
  • 简单的python3脚本:从日志中提取信息
    命名:log_extractor.pyordownload_stats_extractor.py#coding:utf-8#!/usr/bin/python3deffilter_line(line,contains,contains_not):ifall(cinlineforcincontains)andnotany(ninlinefornincontains_not):ifint(line.split()[8])==2......
  • AOP实现日志打印
    packagecom.youmu.framework.love.interfaces;importjava.lang.annotation.*;/***@Author:guodong*@CreateTime:2023-04-1916:38*@Description:自定义注解日志类*@Version:1.0*/@Documented@Target(ElementType.METHOD)//注解的作用类型为方法@Rete......