目录

 ELKB的组成部分

2、用途和使用场景

2.1 为什么要使用ELK 

2.2 使用场景

3、日志采集方案

3.1 整体架构

3.2 日志采集流程

4.ELK安装

4.1 主机准备

4.2 软件安装 

4.2.1 安装jdk

4.2.2 安装kibana 

4.2.3 安装elasticsearch 

4.2.4 安装logstash

4.3 软件配置及启动

4.3.1 kibana软件配置及启动

4.3.2 elasticsearch软件配置及启动 

4.3.3 logstash软件配置及启动 

4.3.3.1 修改配置文件

4.3.3.2 启动服务 

4.4 编写logstash用于收集日志配置文件

4.5 运行logstash 

4.5.1 直接在后台运行

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

5.1 下载filebeat镜像 

5.2 创建filebeat资源清单文件 

5.3 应用filebeat资源清单文件 

5.4 在kibana中添加索引 


 ELKB的组成部分

  • Elasticsearch:Elasticsearch(以下简称ES) 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。 ES是 Elastic Stack 的核心,采用集中式数据存储,可以通过机器学习来发现潜在问题。ES能够执行及合并多种类型的搜索(结构化数据、非结构化数据、地理位置、指标)。支持 PB级数据的秒级检索。
  • Kibana:Kibana 是一个免费且开放的用户界面,能够让您对 Elasticsearch 数据进行可视化,并让您在 Elastic Stack 中进行导航。您可以进行各种操作,从跟踪查询负载,到理解请求如何流经您的整个应用,都能轻松完成
  • Logstash:Logstash 是免费且开放的服务器端数据处理管道,能够从多个来源采集数据,转换数据,然后将数据发送到合适的的“存储库”中。
  • Beats:Beats 是一套免费且开源的轻量级数据采集器,集合了多种单一用途数据采集器。它们从成百上千或成千上万台机器和系统向 Logstash 或 Elasticsearch 发送数据。

2、用途和使用场景

2.1 为什么要使用ELK 

  • 严格按照开发标准来说,开发人员是不能登录生产服务器查看日志数据的
  • 一个应用可能分布于多态服务器,难以查找
  • 同一台服务区可能部署多个应用,日志分散难以管理
  • 日志可能很大,单个文件通常能达到GB级别,日志无法准确定位,日志查询不方便且速度慢
  • 通常日志文件以非结构化存储,不支持数据可视化查询。
  • 不支持日志分析(比如慢查询日志分析、分析用户画像等)。

2.2 使用场景

  • 采集业务日志
  • 采集Nginx日志
  • 采集数据库日志,如MySQL
  • 监控集群性能指标
  • 采集k8s pod日志

3、日志采集方案

3.1 整体架构

3.2 日志采集流程

4.ELK安装

4.1 主机准备

主机软件版本配置IP
kibanakibana7.17.22C2G192.168.10.200
elasticelasticsearch7.17.22C4G192.168.10.201
logstashlogstash7.17.22C4G192.168.10.202

4.2 软件安装 

4.2.1 安装jdk

所有主机全部安装

[root@kibana ~]# yum -y install java-11-openjdk

[root@elastic ~]# yum -y install java-11-openjdk

[root@logstash ~]# yum -y install java-11-openjdk

4.2.2 安装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

4.2.3 安装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

4.2.4 安装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

4.3 软件配置及启动

4.3.1 kibana软件配置及启动

修改以下字段

cat -n /etc/kibana/kibana.yml

 2  server.port: 5601
 7  server.host: "192.168.10.200"
 32  elasticsearch.hosts: ["http://192.168.10.201:9200"]
 115  i18n.locale: "zh-CN"

说明:
server.port 是开启kibana监听端口
server.host 设置远程连接主机IP地址,用于远程访问使用
elasticsearch.hosts 设置elasticsearch.hosts主机IP,用于连接elasticsearch主机,可以为多个值
i18n.locale 设置语言支持,不需要再汉化,直接修改后即可支持中文 

[root@kibana ~]# systemctl enable kibana
[root@kibana ~]# systemctl start kibana 

[root@kibana ~]# ss -anput | grep ":5601"
tcp    LISTEN     0      128    192.168.10.200:5601                  *:*                   users:(("node",pid=2571,fd=71)) 

4.3.2 elasticsearch软件配置及启动 

修改配置文件

cat -n /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.201
    61  http.port: 9200
    70  discovery.seed_hosts: ["192.168.10.201"]
    74  cluster.initial_master_nodes: ["192.168.10.201"]

    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.201
    61  http.port: 9200
    70  discovery.seed_hosts: ["192.168.10.201"]
    74  cluster.initial_master_nodes: ["192.168.10.201"] 

启动服务并验证
[root@elastic ~]# systemctl enable elasticsearch
[root@elastic ~]# systemctl start elasticsearch 

[root@elastic ~]# ss -anput | grep ":9200"
tcp    LISTEN     0      128    [::ffff:192.168.10.201]:9200               [::]:*                   users:(("java",pid=9726,fd=219)) 

4.3.3 logstash软件配置及启动 

4.3.3.1 修改配置文件

cat -n /etc/logstash/logstash.yml

    19  node.name: logstash
    28  path.data: /var/lib/logstash
   133  api.http.host: 192.168.10.202
   139  api.http.port: 9600-9700
   280  path.logs: /var/log/logstash
   
分布式架构中 api.http.host一定要配置为logstash主机IP,不然无法远程访问。

4.3.3.2 启动服务 

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

4.4 编写logstash用于收集日志配置文件

[root@logstash ~]# cat /etc/logstash/conf.d/logstash-to-elastic.conf
input {
  beats {
    host => "0.0.0.0"
    port => "5044"
  }
}

filter {

}


output {
    elasticsearch {
      hosts => "192.168.10.201:9200"
      index => "k8s-%{+YYYY.MM.dd}"
    }
}

input就是接收端口,output就是输出到es,并且索引是什么

4.5 运行logstash 

4.5.1 直接在后台运行

[root@logstash ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/logstash-to-elastic.conf --path.data /usr/share/logstash/data1 &

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

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

5.1 下载filebeat镜像 

下载filebeat镜像

[root@k8s-work1 ~]# docker pull elastic/filebeat:7.17.2

5.2 创建filebeat资源清单文件 

[root@k8s-master1 ~]# cat 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   #filebeat收集的日志目录
        fields:
          app: k8s
          type: module
        fields_under_root: true

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

#配置了Elasticsearch模板名称为k8s-module,并且匹配创建的索引名称模式为k8s-#module-*

    output.logstash:   #输出到logstash
      hosts: ['192.168.10.202: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

5.3 应用filebeat资源清单文件 

[root@k8s-master1 ~]# kubectl apply -f filebeat-to-logstash.yaml

5.4 在kibana中添加索引 

$ip:5601

之前写的index

Logo

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

更多推荐