本次部署的应用有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.11master012cpu双核4G100G
192.168.10.12worker012cpu双核4G100G
192.168.10.13worker022cpu双核4G100G
192.168.10.17ELK1cpu双核4G40G

版本 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页面操作
基本和上次一样
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
现在就能看到日志了
这是系统日志
后面还会写怎么看应用程序的日志
以及容器内部署的应用程序日志

写完已经快噶了
应该会隔一天
如果对您有帮助可以点下关注

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐