日志采集(11)

在Kubernetes等平台上进行任何大型部署时,日志记录都是主要的挑战之一,但是配置和维护用于日志收集的中央存储库可以简化日常操作。为此,Fluentd、Elasticsearch和Kibana的组合可以在Kubernetes集群上创建一个强大的日志记录层

1. 部署es集群

由于前面部署的应用大部分都部署到k8s中的,在将es部署在k8s集群中电脑有点扛不住了,所以这里单独起三台虚拟机来部署es集群(一般也是单独部署)。

  1. 准备
    1. vm配置:1核 1G 20G硬盘

    2. 网络:

       192.168.241.150 es-node1
       192.168.241.151 es-node2
       192.168.241.152 es-node3
      
    3. 创建一个新的用户,es不能使用root用户启动

       adduser hadoop 
      
  2. 基础配置(Linux限制设置)
    1. 修改vm.max_map_count参数

       sudo vi /etc/sysctl.conf
      
       # elasticsearch config start
       vm.max_map_count=262144
       # elasticsearch config end
      
    2. 修改文件限制和最大线程数限制

       sudo vi /etc/security/limits.conf
       
       # elasticsearch config start
       * soft nofile 65536
       * hard nofile 131072
       * soft nproc 2048
       * hard nproc 4096
       # elasticsearch config end
      
  3. 下载安装es
    1. 下载解压

       curl -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.2.0-linux-x86_64.tar.gz
       sudo tar -zxvf elasticsearch-7.2.0-linux-x86_64.tar.gz -C /opt/
      
    2. 配置es

       vi config/elasticsearch.yml
      
       # ---------------------------------- Cluster -----------------------------------
       #
       # Use a descriptive name for your cluster: 设置集群的名称
       #
       cluster.name: cluster
       #
       # ------------------------------------ Node ------------------------------------
       #
       # Use a descriptive name for the node: 设置当前节点的名称,其他节点需要修改
       #
       node.name: node-1
       # ----------------------------------- Paths ------------------------------------
       #
       # Path to directory where to store the data (separate multiple locations by comma): 设置数据目录
       #
       path.data: /opt/elasticsearch/data
       #
       # Path to log files: 设置日志目录
       #
       path.logs: /opt/elasticsearch/logs
       # ---------------------------------- Network -----------------------------------
       #
       # Set the bind address to a specific IP (IPv4 or IPv6): 设置暴露的IP地址,本机IP地址,其他节点需要修改
       #
       network.host: 192.168.241.150
       #
       # Set a custom port for HTTP:
       #
       #http.port: 9200
       #
       # For more information, consult the network module documentation.
       #
       # --------------------------------- Discovery ----------------------------------
       #
       # Pass an initial list of hosts to perform discovery when this node is started: 设置集群中的其它节点(想对于当前节点而言),单播列表,并不需要配置集群所有节点
       # The default list of hosts is ["127.0.0.1", "[::1]"]
       #
       discovery.seed_hosts: ["es-node2", "es-node3"]
       #
       # Bootstrap the cluster using an initial set of master-eligible nodes: 候选master节点,需要和node.name属性相同
       #
       cluster.initial_master_nodes: ["node-1", "node-2","node-3"]
       #
       # For more information, consult the discovery and cluster formation module documentation.
      
    3. 配置JVM参数

       vi config/jvm.options
       # Xms represents the initial size of total heap space
       # Xmx represents the maximum size of total heap space
       # Set Xmx and Xms to no more than 50% of your physical RAM.
       
       -Xms512m
       -Xmx512m
      
    4. 启动

       bin/elasticsearch -d # 后台启动
       # 记录PID并且后台启动
       ./bin/elasticsearch -p /tmp/elasticsearch-pid -d
      
    5. 编写启动脚本,方便使用

       #!/bin/bash
      
       ES_HOME=/opt/elasticsearch
       ES_PID_FILE=/tmp/elasticsearch-pid
       
       action=$1
       
       case $action in
          'start')
               if [ -e $ES_PID_FILE ]
               then
                   echo 'es already started!'
               else
                   echo 'starting es begin......'
       
                   $ES_HOME/bin/elasticsearch -p /tmp/elasticsearch-pid -d
                   sleep 2
                   echo 'start es success.......'
               fi
          ;;
          'stop')
               if [ -e $ES_PID_FILE ]
               then
                   echo 'stopping es begin......'
       
                   es_pid=`cat /tmp/elasticsearch-pid`
                   kill -9 $es_pid
                   sleep 3
                   rm /tmp/elasticsearch-pid
                   echo 'stop es success........'
               else
                   echo "es dosen't start!!"
               fi
          ;;
          *)
               echo 'not support!!'
          ;;
       esac
      

2. 部署kibana

  1. 下载解压

     curl -O https://artifacts.elastic.co/downloads/kibana/kibana-7.2.0-linux-x86_64.tar.gz
     sudo tar -zxvf kibana-7.2.0-linux-x86_64.tar.gz -C /opt/
    
  2. 配置

     vi kibana/config/kibana.yml
    
     # Specifies the address to which the Kibana server will bind. IP addresses and host names are both valid values.
     # The default is 'localhost', which usually means remote machines will not be able to connect.
     # To allow connections from remote users, set this parameter to a non-loopback address.
     server.host: "192.168.241.150"
    
     # The URLs of the Elasticsearch instances to use for all your queries.
     elasticsearch.hosts: ["http://es-node1:9200","http://es-node2:9200","http://es-node3:9200"]
    
  3. 启动

     ./bin/kibana
    
  4. 停止

     # 先获取PID
     ps -ef | grep java
     # 暂停
     kill -9 PID
    
  5. 访问:http://kibana.tlh.com:5601

    1.png

3. 再k8s中部署fluentd

  1. 关于k8s中日志采集的方案可以参照官方文档说明,这里采用node loggin agent的方式来处理。

    2.png
  2. Fulentd说明

    1. 对容器化的应用日志处理建议

      1. The easiest and most embraced logging method for containerized applications is to write to the standard output and standard error streams.
      2. Logs should have a separate storage and lifecycle independent of nodes, pods, or containers.
    2. 日志采集流程

       in_tail -> filter_grep -> out_stdout
      
    3. Event数据结构说明:

      1. tag:消息从哪里来的
      2. time:时间
      3. record:log的内容
  3. 下载

     git clone https://github.com/fluent/fluentd-kubernetes-daemonset
    
  4. 修改es的链接配置,修改fluentd-kubernetes-daemonset文件夹中的fluentd-daemonset-elasticsearch-rbac.yaml的deployment

     spec:
       selector:
         matchLabels:
           k8s-app: fluentd-logging
           version: v1
       template:
         metadata:
           labels:
             k8s-app: fluentd-logging
             version: v1
         spec:
           serviceAccount: fluentd
           serviceAccountName: fluentd
           tolerations:
           - key: node-role.kubernetes.io/master
             effect: NoSchedule
           containers:
           - name: fluentd
             image: fluent/fluentd-kubernetes-daemonset:v1-debian-elasticsearch
             env:
               - name:  FLUENT_ELASTICSEARCH_HOST
                 value: "192.168.241.150"            # 修改为es的主机名或者IP地址
               - name:  FLUENT_ELASTICSEARCH_PORT
                 value: "9200"
               - name: FLUENT_ELASTICSEARCH_SCHEME
                 value: "http"
               # X-Pack Authentication
               # =====================
               - name: FLUENT_ELASTICSEARCH_USER
                 value: "elastic"
               - name: FLUENT_ELASTICSEARCH_PASSWORD
                 value: "changeme"
    
  5. 安装

     kubectl apply -f fluentd-daemonset-elasticsearch-rbac.yaml
    

4.通过kibanna创建index pattern对采集到的日志进行索引

  1. 登陆kibana--->management--->Index Patterns点击创建

    3.png
  2. 查看

    4.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容