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-confignamespace: kube-system
data:filebeat.yml: |-filebeat.prospectors: - type: logpaths:- /messages # filebeat中的日志位置fields: # 给日志打的2个标签app: k8stype: modulefields_under_root: trueoutput.logstash: # filebeat中日志给logstashhosts: ['172.19.3.240:5044']
---
apiVersion: apps/v1
kind: DaemonSet
metadata:name: k8s-logsnamespace: kube-system
spec:selector:matchLabels:project: k8sapp: filebeattemplate:metadata:labels:project: k8sapp: filebeatspec:containers:- name: filebeatimage: collenzhao/filebeat:6.5.4args: ["-c","/etc/filebeat.yml"]resources:requests:cpu: 100mmemory: 100Milimits:cpu: 500mmemory: 500MisecurityContext:runAsUser: 0volumeMounts:- name: filebeat-configmountPath: /etc/filebeat.ymlsubPath: filebeat.yml
        - name: k8s-logs  # 采集宿主机/var/log/messages 到filebeat容器中 /messages中mountPath: /messages   volumes:
      - name: k8s-logshostPath:path: /var/log/messagestype: File- name: filebeat-configconfigMap: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.rhkb.cn/news/317916.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NLP(10)--TFIDF优劣势及其应用Demo

前言 仅记录学习过程,有问题欢迎讨论 TF*IDF: 优势: 可解释性好 可以清晰地看到关键词 即使预测结果出错,也很容易找到原因 计算速度快 分词本身占耗时最多,其余为简单统计计算 对标注数据依赖小 可以使用无标注语…

[RocketMq:基于容器化]:快速部署安装

文章目录 一:相关镜像准备:RocketNameServer1.1:查看相关镜像和版本1.2:拉取镜像1.3:配置和运行RocketNameServer容器 二:相关镜像准备:RocketBroker2.1:创建配置目录和broker配置文…

使用docker创建rocketMQ主从结构,使用

1、 创建目录 mkdir -p /docker/rocketmq/logs/nameserver-a mkdir -p /docker/rocketmq/logs/nameserver-b mkdir -p /docker/rocketmq/logs/broker-a mkdir -p /docker/rocketmq/logs/broker-b mkdir -p /docker/rocketmq/store/broker-a mkdir -p /docker/rocketmq/store/b…

计算机网络 -- 多人聊天室

一 程序介绍和核心功能 这是基于 UDP 协议实现的一个网络程序,主要功能是 构建一个多人聊天室,当某个用户发送消息时,其他用户可以立即收到,形成一个群聊。 这个程序由一台服务器和n个客户端组成,服务器扮演了一个接受…

vue 实现项目进度甘特图

项目需求: 实现以1天、7天、30天为周期(周期根据筛选条件选择),展示每个项目不同里程碑任务进度。 项目在Vue-Gantt-chart: 使用Vue做数据控制的Gantt图表基础上进行了改造。 有需要的小伙伴也可以直接引入插件,自己…

装饰器模式、代理模式、适配器模式对比

装饰器模式、代理模式和适配器模式都是结构型设计模式,它们的主要目标都是将将类或对象按某种布局组成更大的结构,使得程序结构更加清晰。这里将装饰器模式、代理模式和适配器模式进行比较,主要是因为三个设计模式的类图结构相似度较高、且功…

4-1 STM32C8T6控制OLED显示

实物接线: #include "stm32f10x.h" // Device header #include "delay.h" #include "LED.h" #include "Key.h" #include "Buzzer.h" #include "Oled.h"int main(void) {OLED_Init()…

基于SpringBoot实现各省距离Excel导出实战

目录 前言 一、列表及图表信息展示 1、数据过滤调整 2、信息列表及图表展示 3、Excel写入 二、界面可视化 1、Echarts图表和列表展示 2、城市详情和下载功能设计 三、成果展示 1、图表展示 2、部分城市数据分析 总结 前言 今天是五一黄金周假期第二天,不知…

搜索引擎的设计与实现参考论文(论文 + 源码)

【免费】搜索引擎的设计与实现.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89249705?spm1001.2014.3001.5501 搜索引擎的设计与实现 摘要: 我们处在一个大数据的时代,伴随着网络信息资源的庞大,人们越来越多地注重怎样才能…

光模块基础概念

一:什么是光模块? 光模块作为光通信中的重要组成部分,是实现光信号传输过程中光电互相转换的光电子器件。 光模块通常由光发射组件、光接收组件、激光器芯片、探测器芯片等部件组成。光模块结构示意图(SFP封装)此图来源于光模块…

Tensorflow2.0笔记 - ResNet实践

本笔记记录使用ResNet18网络结构,进行CIFAR100数据集的训练和验证。由于参数较多,训练时间会比较长,因此只跑了10个epoch,准确率还没有提升上去。 import os import time import tensorflow as tf from tensorflow import keras …

自适应医疗决策框架 MDAgents:问题复杂度评估 + 医疗决策 + 多智能体协作

自适应医疗决策框架 MDAgents:问题复杂度评估 医疗决策 多智能体协作 提出背景MDAgents 拆解解法:MDAgents框架处理医疗问题3.1 查询复杂性评估例子:糖尿病患者的医疗查询 3.2 专家招募3.3 医疗协作与改良3.4 决策制定 分阶段决策1. 问题复…

【实时数仓架构】方法论

笔者不是专业的实时数仓架构,这是笔者从其他人经验和网上资料整理而来,仅供参考。写此文章意义,加深对实时数仓理解。 一、实时数仓架构技术演进 1.1 四种架构演进 1)离线大数据架构 一种批处理离线数据分析架构,…

目标检测算法YOLOv3简介

YOLOv3由Joseph Redmon等人于2018年提出,论文名为:《YOLOv3: An Incremental Improvement》,论文见:https://arxiv.org/pdf/1804.02767.pdf ,项目网页:https://pjreddie.com/darknet/yolo/ 。YOLOv3是对YOL…

leetcode870.优势洗牌

题目描述: 给定两个长度相等的数组 nums1 和 nums2,nums1 相对于 nums2 的优势可以用满足 nums1[i] > nums2[i] 的索引 i 的数目来描述。 返回 nums1 的任意排列,使其相对于 nums2 的优势最大化。 示例一: 输入&#xff…

BIO、NIO与AIO

文章目录 一 BIO同步阻塞案例BIO模式消息多发多收实现 二 NIONIO核心组件Buffer(缓冲区)Buffer常见方法缓冲区的数据操作直接内存与非直接内存 Channel(通道)channel常用操作 Selector(选择器)selector选择器处理流程NIO非阻塞式网络通信原理分析 NIO网络编程实现群聊系统服务端…

Acrobat Pro DC 2023:专业PDF编辑软件,引领高效办公新时代

Acrobat Pro DC 2023是一款专为Mac和Windows用户设计的专业PDF编辑软件,凭借其强大的功能和卓越的性能,成为现代职场人士不可或缺的得力助手。 这款软件拥有出色的PDF编辑能力。用户不仅可以轻松地对PDF文档中的文字、图片和布局进行编辑和调整&#xf…

【C++】哈希的应用---位图

目录 1、引入 2、位图的概念 3、位图的实现 ①框架的搭建 ②设置存在 ③设置不存在 ④检查存在 ​4、位图计算出现的次数 5、完整代码 1、引入 我们可以看一道面试题 给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数…

菜鸡学习netty源码(一)——ServerBootStrap启动

1.概述 对于初学者而然,写一个netty本地进行测试的Server端和Client端,我们最先接触到的类就是ServerBootstrap和Bootstrap。这两个类都有一个公共的父类就是AbstractBootstrap. 那既然 ServerBootstrap和Bootstrap都有一个公共的分类,那就证明它们两个肯定有很多公共的职…

树莓派4B安装安卓系统LineageOS 21(Android14)

1:系统下载 2:下载好镜像后,准备写入SD卡,我这边使用的是 balenaetcher 3:插入树莓派,按照指示一步一步进行配置,可以配置时区,语言。 注意点 1》:想返回的时候按F2 2》:进入系统…