k8s学习--基于k8s的ELK日志收集的详细过程

文章目录


本次部署的应用有Filebeat+ELK,让我们先简单了解一下

Filebeat

Filebeat 是一个轻量级的日志数据发送器,作为 ELK 堆栈的一个组件,主要用于从各种来源收集日志数据并将其发送到 Logstash 或 Elasticsearch。它是 Elastic Stack 中 Beats 产品家族的一部分。

Filebeat主要特点

轻量级:

Filebeat 设计简单,资源占用低,非常适合部署在边缘节点或资源受限的环境中。

多种输入源:

Filebeat 支持从文件、Docker 日志、容器日志、系统日志等多种来源收集日志数据。

日志传输:

Filebeat 可以将收集到的日志数据发送到多个目标,包括 Logstash、Elasticsearch、Kafka 等。

日志处理:

Filebeat 具有基本的日志处理能力,可以通过模块化的方式实现常见的日志解析和处理。

可靠性:

具有保证至少一次传递的能力,确保日志数据在传输过程中不会丢失。

模块化:

Filebeat 提供了一系列预配置的模块,用于处理常见的日志格式,如 Nginx、Apache、MySQL、系统日志等。

Filebeat使用场景

集中式日志管理: 在分布式系统中集中收集各个节点的日志。
实时日志分析: 通过 Filebeat 将日志数据实时发送到 Elasticsearch,进行实时搜索和分析。
监控和报警: 结合 ELK 堆栈,实现日志数据的实时监控和报警。

ELK简介

ELK 是 Elasticsearch、Logstash 和 Kibana 三个开源工具的组合,常用于数据搜索、日志管理和数据可视化

Elasticsearch简介

Elasticsearch 是一个分布式搜索和分析引擎,基于 Apache Lucene 构建,主要用于存储、搜索和分析大量数据。

Elasticsearch主要特点

实时搜索和分析: 支持实时的数据存储和检索。
分布式: 能够在多个节点上分布数据,提供高可用性和扩展性。
全文搜索: 支持复杂的查询语法,能够进行高效的全文搜索。
RESTful API: 通过 RESTful API 进行数据操作,便于集成和扩展。

Elasticsearch使用场景

日志和事件数据分析: 集中管理和分析日志数据。
全文搜索: 如网站的搜索功能。
监控和报警: 实时监控数据变化并触发报警。


Logstash简介

Logstash 是一个数据收集引擎,能够从多个来源收集数据,进行过滤和转换,然后将数据发送到存储引擎(如 Elasticsearch)。

Logstash主要特点

数据收集: 支持从多种数据源(如文件、数据库、消息队列等)收集数据。
数据处理: 通过过滤器对数据进行处理和转换,如解析日志格式、添加字段等。
数据输出: 将处理后的数据发送到多个目标(如 Elasticsearch、文件、数据库等)。

Logstash使用场景

日志收集和处理: 收集和处理分布在不同系统和应用中的日志。
数据转换: 对原始数据进行格式转换、过滤和增强。


Kibana简介

Kibana 是一个数据可视化和分析平台,专为与 Elasticsearch 一起使用而设计。它提供强大的图形界面,帮助用户进行数据分析和可视化。

Kibana主要特点

**数据可视化:**通过图表、地图、表格等方式展示数据。

**仪表盘:**创建和共享动态仪表盘,实时监控数据变化。

**查询和分析:**通过简单的界面进行数据查询和分析。

Kibana使用场景

日志分析: 可视化分析日志数据,快速发现问题。
业务监控: 创建业务指标的实时监控仪表盘。
安全分析: 用于安全信息和事件管理(SIEM)解决方案。


简单理解

看不懂上面的,没关系,看懂下面就行

Filebeat: 部署在个节点,收集日志

Logstash: 过滤,格式化日志

Elasticsearch: 存储、搜索、分析日志

Kibana: 图形化界面,展示日志、监控系统状态

环境

虚拟机

Ip 主机名 cpu 内存 硬盘
192.168.10.11 master01 2cpu双核 4G 100G
192.168.10.12 worker01 2cpu双核 4G 100G
192.168.10.13 worker02 2cpu双核 4G 100G
192.168.10.17 ELK 1cpu双核 4G 40G

版本 centos7.9

已部署k8s-1.27

注:如果有条件,可以ELK分别放在三台主机上,我这里是资源有限,所以才全放在一台主机上了

一、ELK集群部署

elk主机部署

1.软件安装

安装jdk

可考虑使用openjdk也可以使用oracle jdk

yum -y install java-11-openjdk

安装kibana

wget https://artifacts.elastic.co/downloads/kibana/kibana-7.17.2-x86_64.rpm
yum -y install kibana-7.17.2-x86_64.rpm

安装elasticsearch

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.2-x86_64.rpm
yum -y install elasticsearch-7.17.2-x86_64.rpm

安装logstash

wget https://artifacts.elastic.co/downloads/logstash/logstash-7.17.2-x86_64.rpm
yum -y install logstash-7.17.2-x86_64.rpm

2.软件配置及启动

(1).kibana软件配置及启动
vim /etc/kibana/kibana.yml 

修改如下内容

行号 + 修改后的结果

有的只需要去#号即可

有的不需要更改

\ 复制代码
     2  server.port: 5601
     7  server.host: "192.168.10.17"
    32  elasticsearch.hosts: ["http://192.168.10.17:9200"]
   115  i18n.locale: "zh-CN"



说明:

server.port 是开启kibana监听端口

server.host 设置远程连接主机IP地址,用于远程访问使用

elasticsearch.hosts 设置elasticsearch.hosts主机IP,用于连接elasticsearch主机,可以为多个值

i18n.locale 设置语言支持,不需要再汉化,直接修改后即可支持中文

启动服务并验证

systemctl enable kibana
systemctl start kibana
ss -anput | grep ":5601"
(2).elasticsearch软件配置及启动
vim  /etc/elasticsearch/elasticsearch.yml

同上

\ 复制代码
    17  cluster.name: k8s-elastic
    23  node.name: elastic
    33  path.data: /var/lib/elasticsearch
    37  path.logs: /var/log/elasticsearch
    56  network.host: 192.168.10.17
    61  http.port: 9200
    70  discovery.seed_hosts: ["192.168.10.17"]
    74  cluster.initial_master_nodes: ["192.168.10.17"]


说明

cluster.name 集群名称

node.name 节点名称

path.data 数据目录

path.logs 日志目录

network.host 主机IP

http.port 监听端口

discovery.seed_hosts 主机发现列表

cluster.initial_master_nodes 集群master节点

启动服务并验证

systemctl enable elasticsearch
systemctl start elasticsearch
ss -anput | grep ":9200"
curl http://192.168.10.17:9200
(3).logstash软件配置及启动
vim /etc/logstash/logstash.yml

同上

\ 复制代码
    19  node.name: logstash
    28  path.data: /var/lib/logstash
   133  api.http.host: 192.168.10.17
   139  api.http.port: 9600-9700
   280  path.logs: /var/log/logstash



启动服务

logstash进程不用预先启动,使用时启动即可

现在先不启动

验证logstash可用性

/usr/share/logstash/bin/logstash -e 'input {stdin{} } output {stdout {} }'

输入abc,查看输出内容

abc

ctrl +c 退出

使用logstash输入内容到elasticsearch验证

/usr/share/logstash/bin/logstash -e 'input { stdin{} } output { elasticsearch { hosts => ["192.168.10.17:9200"] index => "logstash-%{+YYYY.MM.dd}" } }'

输入

hello elasticsearch

此内容将会通过kibana页面中的索引看到,但是需要在kibana页面中添加索引

(4).kibana访问

宿主机浏览器访问

192.168.10.17:5601

在欢迎界面选择自己浏览后会进入主界面













(5).编写logstash用于收集日志配置文件

通过filebeat进行收集

vim /etc/logstash/conf.d/logstash-to-elastic.conf
\ 复制代码
input {
  beats {
    host => "0.0.0.0"
    port => "5044"
  }
}

filter {

}


output {
    elasticsearch {
      hosts => "192.168.10.17:9200"
      index => "k8s-%{+YYYY.MM.dd}"
    }
}
(6).运行logstash

如果不涉及多个配置文件,可以直接使用systemctl start logstash;如果有多个配置文件,只想启动一个配置文件,可以使用如下方法。

直接在后台运行

/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/logstash-to-elastic.conf --path.data /usr/share/logstash/data1 &

不输出内容后按两下回车

看看端口

netstat -lntp | grep :5044

二、收集k8s集群节点系统日志

通过在work节点以DaemonSet方法运行filebeat应用实现

1.下载filebeat镜像

所有worker节点

下载filebeat镜像

docker pull elastic/filebeat:7.17.2
docker images

master节点

2.创建filebeat资源清单文件

vim filebeat-to-logstash.yaml
\ 复制代码
apiVersion: v1
kind: ConfigMap
metadata:
  name: k8s-logs-filebeat-config
  namespace: kube-system

data:
  filebeat.yml: |
    filebeat.inputs:
      - type: log
        paths:
          - /var/log/messages
        fields:
          app: k8s
          type: module
        fields_under_root: true

    setup.ilm.enabled: false
    setup.template.name: "k8s-module"
    setup.template.pattern: "k8s-module-*"

    output.logstash:
      hosts: ['192.168.10.17:5044']
      index: "k8s-module-%{+yyyy.MM.dd}"

---

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: docker.io/elastic/filebeat:7.17.2
        args: [
          "-c", "/etc/filebeat.yml",
          "-e",
        ]
        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
          mountPath: /var/log/messages
      volumes:
      - name: k8s-logs
        hostPath:
          path: /var/log/messages
      - name: filebeat-config
        configMap:
          name: k8s-logs-filebeat-config

3.应用filebeat资源清单文件

kubectl apply -f filebeat-to-logstash.yaml

4.验证结果

kubectl get pod -n kube-system -o wide

5.在kibana中添加索引

宿主机浏览器访问192.168.10.17:5601

web页面操作

基本和上次一样






现在就能看到日志了

这是系统日志

后面还会写怎么看应用程序的日志

以及容器内部署的应用程序日志

写完已经快噶了

应该会隔一天

如果对您有帮助可以点下关注

相关推荐
dsywws5 分钟前
Linux学习笔记之vim入门
linux·笔记·学习
A ?Charis43 分钟前
Gitlab-runner running on Kubernetes - hostAliases
容器·kubernetes·gitlab
晨曦_子画1 小时前
3种最难学习和最容易学习的 3 种编程语言
学习
城南vision1 小时前
Docker学习—Docker核心概念总结
java·学习·docker
wclass-zhengge1 小时前
Docker篇(Docker Compose)
运维·docker·容器
李启柱1 小时前
项目开发流程规范文档
运维·软件构建·个人开发·设计规范
茶馆大橘1 小时前
微服务系列五:避免雪崩问题的限流、隔离、熔断措施
java·jmeter·spring cloud·微服务·云原生·架构·sentinel
北漂IT民工_程序员_ZG2 小时前
k8s集群安装(minikube)
云原生·容器·kubernetes
ctrey_2 小时前
2024-11-1 学习人工智能的Day20 openCV(2)
人工智能·opencv·学习
coding侠客2 小时前
揭秘!微服务架构下,Apollo 配置中心凭啥扮演关键角色?
微服务·云原生·架构