kubernetes中使用ELK进行日志收集

目录

一、需要收集哪些日志

1、kubernetes集群的系统组件日志

2、应用日志

二、日志收集方案ELK

1、收集日志:Logstash

2、存储日志:Elasticsearch

3、展示日志:Kibana

三、安装elk

1、下载安装包 

2、创建用户并切换到新用户

3、上传安装包到用户目录 

4、安装配置jdk

5、安装Elasticsearch

6、安装kibana

7、安装Logstash

四、采集k8s系统组件日志

1、编辑资源清单文件 k8s-logs.yaml

2、创建资源

3、修改Logstash的配置文件,并重启

4、配置Kinba查看日志

4.1 访问页面

4.2 按顺序输入点击查看

 4.3 点击discovery查看日志

五、采集应用日志

1、创建“filebeat-nginx-configmap.yaml”文件配置FileBeat参数

2、创建“nginx-deployment.yaml”文件部署Nginx应用

3、执行“kubectl apply -f” 命令

4、修改Logstash的配置文件,并重启

5、访问Kibana页面,查看日志


一、需要收集哪些日志

1、kubernetes集群的系统组件日志

        我们这里底层的容器引擎使用的是Docker,且宿主机上的systemd服务可用。因此,我们这里k8s集群系统的日志文件在宿主机的“/var/log”目录下

2、应用日志

         在kubernetes集群中部署的应用(如tomcat、nginx)在运行过程中产生的日志

二、日志收集方案ELK

Elasticsearch + Logstash + Kibana

1、收集日志:Logstash

        是一个数据实时传输管道:能够将数据实时地从输入端传输到输出端,还能够根据实际的需求在传输过程中加入过滤器来筛选数据。在日志系统中,常被作为日志采集工具使用

2、存储日志:Elasticsearch

        是一个开源的全文搜索和分析引擎:能够快速地存储、搜集和分析数据。可以被看成一个非关系型数据库。在日志系统中,常被作为存储和搜索日志的工具使用。

3、展示日志:Kibana

        开源的分析与可视化平台。在日志系统中,常作为Elasticsearch的输出端使用。用户可以使用Kibana搜索、查看Elasticsearch中的数据,并以不同的方式(如图表、表格、地图等)进行展现。

三、安装elk

        下面将Elasticsearch、Logstash、Kibana都安装在master节点上。

在安装与配置ELK时,建议不要使用root用户,可以创建一个普通用户来进行

1、下载安装包 

链接:https://pan.baidu.com/s/1iuN7HZU1kg1Kv55WW1q-Jg 
提取码:4ns0

2、创建用户并切换到新用户

elk/elk

[root@k8s-master ~]# useradd elk
[root@k8s-master ~]# passwd elk
更改用户 elk 的密码 。

新的 密码:

重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

3、上传安装包到用户目录 

4、安装配置jdk

#解压jdk包

[elk@k8s-master ~]$ tar -zxvf jdk-8u401-linux-x64.tar.gz 


#编辑“~/.bash_profile” 追加如下内容:

JAVA_HOME=/home/elk/jdk1.8.0_401
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH
 

#生效文件

[elk@k8s-master ~]$ source ~/.bash_profile 

5、安装Elasticsearch

#解压Elasticsearch

[elk@k8s-master ~]$ tar -zxvf elasticsearch-6.8.7.tar.gz 
 

#启动Elasticsearch

[elk@k8s-master ~]$ elasticsearch-6.8.7/bin/elasticsearch &
 

#测试是否启动成功

[elk@k8s-master ~]$ curl localhost:9200
如下,Elasticsearch启动成功

6、安装kibana

#解压安装包

[elk@k8s-master ~]$ tar -zxvf kibana-6.8.7-linux-x86_64.tar.gz 


#编辑kibana-6.8.7-linux-x86_64/config/kibana.yml 文件

---

server.port: 5601
# 需要写成master节点的IP地址
server.host: "172.19.3.240"
elasticsearch.hosts: ["http://localhost:9200"]

---

#启动Kibana

[elk@k8s-master ~]$ kibana-6.8.7-linux-x86_64/bin/kibana &

# 输出如下信息启动成功

# 访问控制台

7、安装Logstash

# 解压logstash

[elk@k8s-master ~]$ tar -zxvf logstash-6.8.7.tar.gz 
#启动命令

[elk@k8s-master ~]$ cd logstash-6.8.7/
[elk@k8s-master logstash-6.8.7]$ bin/logstash -f config/logstash.conf &
 

四、采集k8s系统组件日志

方式一:node节点上部署专门的日志收集程序。在node节点上部署一个日志收集代理来收集该节点的日志信息。为了保证每个node节点都能够运行这样一个代理,可以采用DaemonSet方式来运行代理。如上图所示:将宿主机的容器日志挂载到DaemonSet中,然后由日志收集代理将日志转发到后端的日志收集系统ELK中 

1、编辑资源清单文件 k8s-logs.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: k8s-logs-filebeat-config
  namespace: kube-system
data:
  filebeat.yml: |-
    filebeat.prospectors: 
      - type: log
        paths:
          - /messages # filebeat中的日志位置
        fields: # 给日志打的2个标签
          app: k8s
          type: module
        fields_under_root: true
    output.logstash: # filebeat中日志给logstash
      hosts: ['172.19.3.240:5044']
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: k8s-logs
  namespace: kube-system
spec:
  selector:
    matchLabels:
      project: k8s
      app: filebeat
  template:
    metadata:
      labels:
        project: k8s
        app: filebeat
    spec:
      containers:
      - name: filebeat
        image: collenzhao/filebeat:6.5.4
        args: [
          "-c","/etc/filebeat.yml"
        ]
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
          limits:
            cpu: 500m
            memory: 500Mi
        securityContext:
          runAsUser: 0
        volumeMounts:
        - name: filebeat-config
          mountPath: /etc/filebeat.yml
          subPath: filebeat.yml
        - name: k8s-logs  # 采集宿主机/var/log/messages 到filebeat容器中 /messages中
          mountPath: /messages   
      volumes:
      - name: k8s-logs
        hostPath:
          path: /var/log/messages
          type: File
      - name: filebeat-config
        configMap:
          name: k8s-logs-filebeat-config

2、创建资源

[K8S@k8s-master k8s-log]$ kubectl apply -f k8s-log.yaml 
configmap/k8s-logs-filebeat-config created
daemonset.apps/k8s-logs created

查看启动成功

3、修改Logstash的配置文件,并重启

根据需求,将filebeat中指定fields字段分类传给Elasticsearch

[elk@k8s-master ~]$ cat logstash-6.8.7/config/logstash.conf 
# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.

input {
  beats {
    port => 5044
  }
}

output {
  if [app] == "k8s" { # filebeat中的field字段
    if [type] == "module" {
      elasticsearch {
        hosts => ["http://localhost:9200"]
        index => "k8s-log-%{+YYYY.MM.dd}" #打包到日志名称到elasticsearch中
      }
    }
  }
}

重启Logstash

[elk@k8s-master ~]$ cd logstash-6.8.7/
[elk@k8s-master logstash-6.8.7]$ ./bin/logstash -f ./config/logstash.conf &

4、配置Kinba查看日志

4.1 访问页面

4.2 按顺序输入点击查看

 

 4.3 点击discovery查看日志

点击message后边都add,会被添加到上边的Selected field中,可以方便我们查看日志

五、采集应用日志

方式二:Pod中增加专用的日志收集容器

核心是在每个运行应用的Pod中增加一个新的容器,该容器专门用于运行日志收集代理程序。应用可以通过数据卷的方式将日志挂碍到这个容器中,最终将日志转发到后端的日志收集系统ELK中

1、创建“filebeat-nginx-configmap.yaml”文件配置FileBeat参数

[K8S@k8s-master nginx]$ cat filebeat-nginx-configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: filebeat-nginx-config
data:
  filebeat.yml: |-
    filebeat.prospectors:
      - type: log
        paths:
          - /usr/local/nginx/logs/access.log   # filebeat中日志文件位置
        fields: # 给日志文件的标签
          app: nginx
          type: nginx-access

        fields_under_root: true
      - type: log
        paths:
          - /usr/local/nginx/logs/error.log
        fields: # 给日志文件的标签
          app: nginx
          type: nginx-error

        fields_under_root: true
    output.logstash:
      hosts: ['172.19.3.240:5044']
 

2、创建“nginx-deployment.yaml”文件部署Nginx应用

[K8S@k8s-master nginx]$ cat filebeat-nginx-configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: filebeat-nginx-config
data:
  filebeat.yml: |-
    filebeat.prospectors:
      - type: log
        paths:
          - /usr/local/nginx/logs/access.log
        fields:
          app: nginx
          type: nginx-access
        fields_under_root: true
      - type: log
        paths:
          - /usr/local/nginx/logs/error.log
        fields:
          app: nginx
          type: nginx-error
        fields_under_root: true
    output.logstash:
      hosts: ['172.19.3.240:5044']

[K8S@k8s-master nginx]$ cat nginx-deployment.yaml 
apiVersion: v1
kind: Service
metadata:
  name: nginx-test-service
spec:
  type: NodePort
  ports:
  - name: http
    port: 80
    protocol: TCP
  selector:
    app: nginx
    type: nginx-demo
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-demo
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
      type: nginx-demo
  template:
    metadata:
      labels:
        app: nginx
        type: nginx-demo
    spec:
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - name: nginx-logs
          mountPath: /var/log/nginx
      - name: filebeat
        image: collenzhao/filebeat:6.5.4
        args: [
          "-c", "/etc/filebeat.yml",
          "-e",
        ]
        volumeMounts:
        - name: filebeat-config
          mountPath: /etc/filebeat.yml
          subPath: filebeat.yml
        - name: nginx-logs
          mountPath: /usr/local/nginx/logs
      volumes:
      - name: nginx-logs # 通过临时数据卷,将nginx容器中日志挂在到filebeat容器中
        emptyDir: {}

      - name: filebeat-config
        configMap:
          name: filebeat-nginx-config
 

3、执行“kubectl apply -f” 命令

[K8S@k8s-master nginx]$ kubectl apply -f filebeat-nginx-configmap.yaml 
[K8S@k8s-master nginx]$ kubectl apply -f nginx-deployment.yaml 

查看应用启动成功,为了生成access.log文件,我们访问下应用即可  172.19.3.240:31535

4、修改Logstash的配置文件,并重启

[elk@k8s-master config]$ cat logstash.conf 
# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.

input {
  beats {
    port => 5044
  }
}

output {
  if [app] == "k8s" {
    if [type] == "module" {
      elasticsearch {
        hosts => ["http://localhost:9200"]
        index => "k8s-log-%{+YYYY.MM.dd}"
      }
    }
  }
  if [app] == "nginx" {
    if [type]== "nginx-access" {
      elasticsearch {
        hosts => ["http://localhost:9200"]
        index => "nginx-access-%{+YYYY.MM.dd}"
      }
    }
    if [type]== "nginx-error" {
      elasticsearch {
        hosts => ["http://localhost:9200"]
        index => "nginx-error-%{+YYYY.MM.dd}"
      }
    }

  }
}
 

获取进程号,关闭进程

[elk@k8s-master config]$ ps -ef | grep logstash
elk      28634 34503  0 15:39 pts/1    00:00:00 grep --color=auto logstash
elk      61123     1  7 14:54 ?        00:03:28 /home/elk/jdk1.8.0_401/b..................................省略..........

#关闭进程

[elk@k8s-master config]$ kill -9 61123

#再次查看进程关闭
[elk@k8s-master config]$ ps -ef | grep logstash
elk      44799 34503  0 15:41 pts/1    00:00:00 grep --color=auto logstash
[elk@k8s-master config]$ 
 

启动logstash

[elk@k8s-master logstash-6.8.7]$ bin/logstash -f config/logstash.conf &

5、访问Kibana页面,查看日志

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/588599.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Excel】excel连接数字和符号

使用“&”对数字和符号进行连接 示例: 将“2.6”和“,”连成“2.6,” 连接公式为: V3&W3 V3和W3分别是"2.6"和“,”在excel中的位置

数据结构的队列(c语言版)

一.队列的概念 1.队列的定义 队列是一种常见的数据结构,它遵循先进先出的原则。类似于现实生活中排队的场景,最先进入队列的元素首先被处理,而最后进入队列的元素则要等到前面的元素都被处理完后才能被处理。 在队列中,元素只能…

Text-to-SQL小白入门(12)Awesome-Text2SQL开源项目star破1000

项目介绍 项目地址 23年9月份刚开源这个项目,大半年过去了,star数终于破1000啦,决定在知乎更新一下内容,看看内容变化,知乎有上当时项目介绍的链接:追光者:Text-to-SQL小白入门(六&…

2.1 Java全栈开发前端+后端(全栈工程师进阶之路)-前端框架VUE3-基础-初识Vue

Vue概述 早期前后端分离模式 早期的前后端分离开发模式是这样的&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge">&l…

axios.get请求 重复键问题??

封装的接口方法&#xff1a; 数据&#xff1a; 多选框多选后 能得到对应的数组 但是请求的载荷却是这样的,导致会请求不到数据 departmentChecks 的格式看起来是一个数组&#xff0c;但是通常 HTTP 请求的查询参数不支持使用相同的键&#xff08;key&#xff09;名多次。如…

蓝桥杯练习系统(算法训练)ALGO-953 混合积

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 众所周知&#xff0c;人人都在学习线性代数&#xff0c;既然都学过&#xff0c;那么解决本题应该很方便。   宇宙大战中&…

STM32 看门狗WDG

一、看门狗&#xff08;Watchdog&#xff09; 看门狗可以监控程序的运行状态&#xff0c;当程序因为设计漏洞、硬件故障、电磁干扰等原因&#xff0c;出现卡死或跑飞现象时&#xff0c;看门狗能及时复位程序&#xff0c;避免程序陷入长时间的罢工状态&#xff0c;保证系统的可靠…

BetterDisplay Pro for Mac:显示器校准软件

BetterDisplay Pro for Mac是一款出色的显示器校准软件&#xff0c;旨在提升你的视觉体验。它提供了准确的显示器参数调整&#xff0c;包括亮度、对比度、色温和色域等&#xff0c;让你的显示器呈现更真实、清晰、细腻的图像。此外&#xff0c;软件还提供多种预设模式和自定义选…

ABAP 数据写入Excel 并保存

参考老白 https://www.cnblogs.com/liaojunbo/archive/2011/09/06/2168552.html 但是缺zcl_excel 。需要从 dotabap要引入abap2xlsx 英文版进入后 尝试了一下 1&#xff09;列的宽度自适应么有找到在哪里&#xff1f; 列宽设置 lo_worksheet->set_column_width( ip_co…

基于springboot+vue+Mysql的网上商城购物系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

reactjs后台管理系统搭建

1 通过yarn 模板创建reactjs项目 yarn create vite reactjs-antdesign-admin --template react-ts 2 基础路由测试 定义一个router/index.tsx&#xff0c;里面定义路由组件 const Router: React.FC () > {return (<HashRouter><Switch><Route path"…

设计模式: 责任链模式

目录 一&#xff0c;责任链模式 二&#xff0c;特点 四&#xff0c;实现步骤 五&#xff0c;代码 一&#xff0c;责任链模式 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种软件设计模式&#xff0c;它属于行为型模式。在这种模式中&#xff0c…

WPF之创建无外观控件

1&#xff0c;定义无外观控件。 定义默认样式&#xff0c;在其静态构造函数中调用DefaultStyleKeyProperty.OverrideMetadata()。 //设置默认样式DefaultStyleKeyProperty.OverrideMetadata(typeof(ColorPicker), new FrameworkPropertyMetadata(typeof(ColorPicker))); 在项目…

tomcat篇-windows 运行tomcat的startup.bat时,终端打印的中文显示为乱码

当运行Tomcat的startup.bat时&#xff0c;如果终端中中文显示为乱码&#xff0c;这通常是因为Tomcat使用的日志输出编码与Windows命令行默认的编码不匹配。针对这一问题&#xff0c;你可以尝试以下步骤来解决&#xff1a; 1、执行startup.bat&#xff0c;在输出的窗口右击&…

Android --- 网络请求

通常在 Android 中进行网络连接一般使用 Scoket 和HTTP&#xff0c;HTTP 请求方式比 Scoket 多。HTTP 请求一般采用原生的 HttpClient 和 HttpUrlConnection 的两种网络访问方式&#xff08;系统自带的&#xff09;。但是在 Android 5.0 的时候 Google 就不推荐使用 HttpClient…

【限免】雷达目标生成与探测研究项目【附MATLAB代码】

文章来源&#xff1a;微信公众号&#xff1a;EW Frontier 课题背景 该项目的目标是模拟FMCW雷达检测运动目标&#xff0c;然后执行信号处理功能&#xff0c;以估计模拟目标的距离和多普勒速度。 图1&#xff1a;雷达模拟和检测的项目工作流程 FMCW波形设计 根据系统要求设计…

JAVA Coding 规范

Coding 规范 文章目录 Coding 规范一.文件规范1.1 声明1.2 缩进1.3 空行1.4 空格1.5 对齐1.6 小括号1.7 花括号1.8 代码长度 二.命名规范2.1 命名总则2.2 命名空间2.3 类与接口2.4 方法命名2.5 属性命名2.6 常量命名2.7 变量命名 三.语句规范3.1 语句总则3.2 循环语句3.3 Switc…

windows rabbitMq安装

一、Erlang 环境准备 下载安装包 跟我们跑java项目&#xff0c;要装jdk类似。rabbitMQ是基于Erlang开发的&#xff0c;因此安装rabbitMQ服务器之前&#xff0c;需要先安装Erlang环境。 官网直接下载windows直装版本&#xff1a;https://www.erlang.org/downloads 无脑安装&a…

【CGALDotNet】CGAL的C#封装(C#调用编译好的CGAL的dll)

介绍 开源项目出处&#xff08;两个模块&#xff09;&#xff1a; 链接1&#xff1a;https://github.com/Scrawk/CGALDotNet/tree/master?tabreadme-ov-file 链接2&#xff1a;https://github.com/Scrawk/CGALDotNetGeometry 该项目提供了编译的、封装相关接口后的CGAL库&am…

C语言 | Leetcode C语言题解之第62题不同路径

题目&#xff1a; 题解&#xff1a; int uniquePaths(int m, int n) {long long ans 1;for (int x n, y 1; y < m; x, y) {ans ans * x / y;}return ans; }
最新文章