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.mzph.cn/pingmian/5973.shtml

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

相关文章

2024-05-02 商业分析-杭州小万科技-商业模式分析

摘要: 对杭州小万科技的商业模式进行分析,以对其做出客观的评估。 杭州小万科技的资料: 杭州小万科技有限公司 - 企知道 (qizhidao.com) 杭州小万科技有限公司网站备案查询 - 天眼查 (tianyancha.com) 杭州小万科技有限公司 - 爱企查 (baidu.com) ​ 2023年年报:

SMB 协议详解之-TreeID原理和SMB数据包分析技巧

在前面分析SMB协议数据包的过程中,这里,可以看到在SMB协议中存在很多的ID,即Unique Identifiers。那么这些ID表示什么含义?在实际分析数据包的过程中如何根据这些ID进行过滤分析?本文将介绍SMB/SMB2中的tree id ,并介绍如何通过tree id 快速的分析SMB数据包中各种命令交互…

使用jdbc方式操作ClickHouse

1、创建测试表,和插入测试数据 create table t_order01(id UInt32,sku_id String,total_amount Decimal(16,2),create_time Datetime ) engine MergeTreepartition by toYYYYMMDD(create_time)primary key (id)order by (id,sku_id);insert into t_order01 values …

Agent AI智能体:如何借助机器学习引领科技新潮流

文章目录 📑前言一、Agent AI智能体的基本概念二、Agent AI智能体的技术进步2.1 机器学习技术2.2 自适应技术2.3 分布式计算与云计算 三、Agent AI智能体的知识积累3.1 知识图谱3.2 迁移学习 四、Agent AI智能体的挑战与机遇4.1 挑战4.2 机遇 小结 📑前言…

【网站项目】高校推免报名

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

Java-异常处理-定义三角形类Triangle和异常三角形IllegalTriangleException类 (1/2)

任意一个三角形,其任意两边之和大于第三边。当三角形的三条边不满足前述条件时,就表示发生了异常,将这种异常情况定义为IllegalTriangleException类。 自定义异常类IllegalTriangleException: 当三角形的三条边不满足条件&#x…

[随记]Mac安装Docker及运行开源Penpot

下载Docker Desktop for Mac:https://www.docker.com/products/docker-desktop/ 安装Docker Desktop for Mac,安装完成后,启动Docker,然后在终端输入: docker version 在Mac电脑的Desktop,随便创建一个文…

零代码编程:用通义千问免费批量翻译英文文档

首先,在阿里云的dashScope灵积模型服务中,申请一个API-key,有挺多免费token的。 然后,在通义千问中输入提示词: 你是一个Python编程专家,现在要完成一个编写基于qwen-turbo模型API和dashscope库的程序脚本…

Android Handler用法

Android Handler用法 为什么要设计Handler机制?Handler的用法1、创建Handler2、Handler通信2.1 sendMessage 方式2.2 post 方式 Handler常用方法1、延时执行2、周期执行 HandlerThread用法主线程-创建Handler子线程-创建Handler FAQMessage是如何创建主线程中Looper…

云端芳华、运维之美

今天,在我们享受互联网服务带来的便利与高效的同时,有一群人默默地在幕后为我们提供支持,他们就是云端运维人员。 值此五一国际劳动节来临之际,我们要真诚感谢他们辛勤的劳动和奉献!

springcloud自定义全局异常

自行创建一个实体类 /*** 全局异常处理类**/ ControllerAdvice public class GlobalExceptionHandler {ExceptionHandler(Exception.class) ResponseBody public Result error(Exception e){e.printStackTrace(); return Result.fail();}/*** 自定义异常处理方法* param e * re…

2023-2024年汽车行业报告/方案合集(精选345份)

汽车行业报告/方案(精选345份) 2023-2024年 来源:2023-2024年汽车行业报告/方案合集(精选345份) 【以下是资料目录】 2023中国汽车科技50强 2023中国智能汽车产业发展与展望 2023比亚迪海豹汽车拆解报告 2023新能…

unity制作app(3)--gps定位

1.unity中定位Unity之GPS定位(高德解析)_unity gps定位-CSDN博客 代码需要稍微修改一下,先把脚本绑到一个button上试一试! 2.先去高德地图认证(app定位) 创建应用和 Key-Web服务 API | 高德地图API (ama…

C#知识|汇总方法重载与静态方法应用技巧

哈喽,你好,我是雷工! 今天学习C#方法重载与静态方法应用技巧的相关内容。 01 方法重载有什么好处? 1.1、可以有效的减少类的对外接口(只显示一个方法比较简洁),从而降低类的复杂度。 1.2、方便…

【Vue 2.x】学习vue之二组件

文章目录 Vue二组件第五章es6文件导入出1、导出export 组件(component)1、定义2、模块化与组件化3、组件的分类1、非单文件组件非单文件三步骤创建组件标准写法简化写法组件的嵌套非单文件的不足之处 2、单文件组件vue单文件组件的使用脚手架创建项目重点…

qml之text

显示字体 Text {text: "The quick brown fox"color: "#303030"font.family: "Ubuntu"font.pixelSize: 28x:200y:200}Text {width:84elide: Text.ElideMiddle y:text1.ytext1.height20text: "一个很长很长的句子 !!!!!!!!!!"style…

全新神经网络架构KAN一夜爆火!200参数顶30万,MIT华人一作 | 最新快讯

白交衡宇发自凹非寺 量子位公众号 QbitAI 一种全新的神经网络架构 KAN,诞生了! 与传统的 MLP 架构截然不同,且能用更少的参数在数学、物理问题上取得更高精度。 比如,200 个参数的 KANs,就能复现 DeepMind 用 30 万参数…

Linux 进程间通信之匿名管道

💓博主CSDN主页:麻辣韭菜💓   ⏩专栏分类:Linux知识分享⏪   🚚代码仓库:Linux代码练习🚚   🌹关注我🫵带你学习更多Linux知识   🔝 目录 前言 一. 进程间通信介绍 1.进程间通…

【linuxC语言】stat函数

文章目录 前言一、stat函数二、示例代码总结 前言 在Linux系统编程中,stat() 函数是一个非常重要的工具,用于获取文件的元数据信息。无论是在系统管理、文件处理还是应用开发中,都可能会用到 stat() 函数。通过调用 stat() 函数,…

AI视频教程下载:用ChatGPT提示词开发AI应用和GPTs

在这个课程中,你将深入ChatGPT的迷人世界,学习如何利用其能力构建创新和有影响力的工具。你将发现如何创建不仅吸引而且保持用户参与度的应用程序,将流量驱动到你的网站,并开辟新的货币化途径。 **课程的主要特点:** …