zoukankan      html  css  js  c++  java
  • Kubernetes Part6 ---- ELK Stack收集Kubernetes应用日志

    需求背景

    •业务发展越来越庞大,服务器越来越多
    •各种访问日志、应用日志、错误日志量越来越多
    •开发人员排查问题,需要到服务器上查日志,效率低、权限不好控制
    •运维需实时关注业务访问情况

    K8S环境中需要查看的应用日志

    应用程序日志记录体现方式分为两类:
    •标准输出:输出到控制台,使用kubectl logs可以看到
    •日志文件:写到容器的文件系统的文件

    日志获取方式

     针对标准输出:以DaemonSet方式在每个Node上部署一个日志收集程序,采集/var/lib/docker/containers/目录下所有容器日志

     针对容器中日志文件:在Pod中增加一个容器运行日志采集器,使用emtyDir共享日志目录让日志采集器读取到日志文件

    ELK 日志系统介绍

    ELK 是三个开源软件的缩写,提供一套完整的企业级日志平台解决方案。
    分别是:
    •Elasticsearch:搜索、分析和存储数据
    •Logstash :采集日志、格式化、过滤,最后将数据推送到Elasticsearch存储
    •Kibana:数据可视化
    •Beats :集合了多种单一用途数据采集器,用于实现从边缘机器向Logstash 和Elasticsearch 发送数据。里面应用最多的是Filebeat,是一个轻量级日志采集器。

    ELK 日志系统安装配置

    准备YAML文件

    [root@k8s-master03 elk]# ls -l
    total 20
    -rw-r--r-- 1 root root 2108 Jan  1 18:09 app-log-logfile.yaml
    -rw-r--r-- 1 root root  528 Jan  1 18:09 app-log-stdout.yaml
    -rw-r--r-- 1 root root 1450 Jan  1 18:09 elasticsearch.yaml
    -rw-r--r-- 1 root root 3166 Jan  1 18:09 filebeat-kubernetes.yaml
    -rw-r--r-- 1 root root  924 Jan  1 18:09 kibana.yaml
    

    搭建日志系统:
    •elasticsearch.yaml # ES数据库
    •kibana.yaml # 可视化展示
    日志收集:
    •filebeat-kubernetes.yaml # 采集所有容器标准输出
    •app-log-stdout.yaml # 标准输出测试应用
    •app-log-logfile.yaml # 日志文件测试应用

    应用YAML

    [root@k8s-master03 elk]# kubectl apply -f elasticsearch.yaml 
    deployment.apps/elasticsearch created
    persistentvolumeclaim/es-pvc created
    service/elasticsearch created
    [root@k8s-master03 elk]# kubectl apply -f kibana.yaml 
    deployment.apps/kibana created
    service/kibana created
    
    [root@k8s-master03 elk]# kubectl get pod -n ops 
    NAME                                  READY   STATUS    RESTARTS   AGE
    elasticsearch-549b496f94-hnj4v        1/1     Running   0          79s
    grafana-757fcd5f7c-wdnt4              1/1     Running   0          90m
    kibana-55c8979979-kxqgh               1/1     Running   0          72s
    
    [root@k8s-master03 elk]# kubectl get svc -n ops 
    NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
    elasticsearch        ClusterIP   10.106.236.50    <none>        9200/TCP            106s
    grafana              NodePort    10.100.91.227    <none>        80:30030/TCP        90m
    kibana               NodePort    10.109.229.66    <none>        5601:30601/TCP      99s
    kube-state-metrics   ClusterIP   10.106.88.221    <none>        8080/TCP,8081/TCP   71m
    node-exporter        ClusterIP   None             <none>        9100/TCP            78m
    prometheus           NodePort    10.108.216.228   <none>        9090:30090/TCP      104m
    

    NodePort访问 http://172.16.0.21;30601 验证可以登录

    应用 filebeat 获取所有容器标准输出

    [root@k8s-master03 elk]# kubectl apply -f filebeat-kubernetes.yaml 
    configmap/filebeat-config created
    configmap/filebeat-inputs created
    daemonset.apps/filebeat created
    clusterrolebinding.rbac.authorization.k8s.io/filebeat created
    clusterrole.rbac.authorization.k8s.io/filebeat created
    serviceaccount/filebeat created
    
    [root@k8s-master03 elk]# kubectl  get pod -n ops | grep file
    filebeat-7s9xq                        1/1     Running   0          41s
    filebeat-qg7jw                        1/1     Running   0          41s
    

     

    查看索引(日志记录集合):Management -> Stack Management -> 索引管理

     

     

    将索引关联到Kibana:索引模式-> 创建-> 匹配模式-> 选择时间戳

     

     

     一般一个索引对应一个应用日志

    导航至 discover

      

    基于条件过滤 (只看ops namespace下的pod日志)

    kubernetes.namespace : "ops" 

    查看索引(日志记录集合):Management -> Stack Management -> 索引管理

  • 相关阅读:
    在main函数中使用django模型(附django正反向的外键关联查询)
    使用正则表达式替换文本内容
    spring 上下文和spring mvc上下文和web应用上下文servletContext之间的关系
    idea快捷键
    Spring MVC的jar包版本问题
    Spring MVC的参数类型转换
    HiddenHttpMethodFilter进行请求过滤,实现Rest风格的url
    Spring MVC的异常处理
    Spring MVC 的拦截器
    @ResponseBody&@RequestBody
  • 原文地址:https://www.cnblogs.com/houcong24/p/14220600.html
Copyright © 2011-2022 走看看