ELK日志平台搭建与使用

ElasticSearch Logstash Kibana Filebeat 搭建与使用

日志介绍

日志主要包括系统日志、应用程序日志和安全日志。
开发人员可以通过日志了解服务器软硬件信息程序运行中的错误及原因。
通常,日志被分散在储存不同的设备上。
因此需要集中起来方便管理。
集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,
但是不够方便与可视化。
开源实时日志分析ELK平台能够完美的解决我们上述的问题

日志去向

  • 日志分析

    .log -> flume -> kafka -> hdfs -> mapreduce/spark -> hbase/*

  • 日志监控

    .log -> filebeat -> logstash -> elasticSearch

包含功能
  • 1)收集-能够采集多种来源的日志数据
  • 2)传输-能够稳定的把日志数据传输到指定机器
  • 3)存储-存储日志数据
  • 4)分析-可以支持 UI 分析
搭建环境

由于服务并不是太多选择单节点模式,若服务应用较多则选择集群模式搭建

使用docker容器启动相应服务

配置文件准备
  • ElasticSearch
    暂时不需要
    
  • Logstash
    • logstash.conf
     input {
       beats {
         port => "5044"
       }
     }
     
     filter {
             mutate {
                 split => ["source","/"]
                     add_field => {
                         "temp" => "%{[source][4]}"
                     }
                 remove_tag => ["beats_input_codec_plain_applied"]
             }
             mutate{
                split => ["temp","."]
                     add_field => {
                         "level" => "%{[temp][0]}"
                     }
                remove_field => [ "temp" ]
             }
     }
     output {
       stdout { codec => rubydebug }
       elasticsearch  {
                     hosts => ["http://xxxxxx:xxx"]
                     index => "%{[@metadata][beat]}-%{[tags]}-%{+YYYY.MM.dd}"
                     document_type => "logs"
       }
     
     }
    
    
    • logstash.yml
    # Options for log.level:
    #   * fatal
    #   * error
    #   * warn
    #   * info (default)
    #   * debug
    #   * trace
    #
     log.level: info
     path.logs: /var/log/logstash
    
    
  • Filebeat
    • filebeat.yml
    filebeat.prospectors:
      - input_type: log
        paths:
          # 指定服务日志路径
          - /var/logs/xxxxx/*.log
        multiline:
          pattern: '^\s*("{)'
          negate: true
          match: after
          max_lines: 1000
          timeout: 30s
        # 指定服务tag 用于es index
        tags: ["xxxx"]
      - input_type: log
        paths:
          - /var/logs/xxxx/*.log
        tags: ["xxx"]
    output:
      logstash:
        # 输出到logstash地址和端口号
        hosts: ["xxxxx:5044"]
    
  • Nginx
    • nginx.conf
    #user  nobody;
    worker_processes  1;
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    #pid        logs/nginx.pid;
    events {
      worker_connections  1024;
    }
    http {
      include       mime.types;
      default_type  application/octet-stream;
      #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
      #                  '$status $body_bytes_sent "$http_referer" '
      #                  '"$http_user_agent" "$http_x_forwarded_for"';
      #access_log  logs/access.log  main;
      sendfile        on;
      #tcp_nopush     on;
      #keepalive_timeout  0;
      keepalive_timeout  65;
      #gzip  on;
      upstream kibana{
        server xxxx:5601 weight=1;
      }
      server {
        listen xxxx;
        server_name localhost;
        location / {
          auth_basic "auth for kibana";
          auth_basic_user_file /etc/nginx/htpasswd;
          proxy_pass http://kibana;
        }
      }
    }
    
准备挂在路径拷贝文件修改权限
mkdir -p /opt/data/{elasticsearch,filebeat,kibana,logstash,nginx}/{data,logs}
mkdir -p /opt/data/logstash/{config,pipeline}
cp logstash.conf /opt/data/logstash/pipeline
cp logstash.yml /opt/data/logstash/config
cp filebeat.yml /opt/data/kibana
cp nginx.conf  /opt/data/nginx
printf "xxxxx:$(openssl passwd -crypt xxxxx)\n" >> ./htpasswd
cp ./htpasswd /etc/nginx/
chmod o+rw -R /opt/data
启动
  • ElasticSearch
 docker run -itd --rm -9200:9200 -p9300:9300 --name es -v /opt/data/elasticsearch/logs:/usr/share/elasticsearch/logs -v /opt/data/elasticsearch/data:/usr/share/elasticsearch/data  -e "discovery.type=single-node" elasticsearch:6.5.1
  • Logstash
  docker run -itd --rm -p5044:5044 -p9600:9600 --name ls -v /opt/data/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml -v /opt/data/logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf -v /opt/data/logstash/data/:/usr/share/logstash/data/ logstash:6.5.1
  • Filebeat
  docker run --rm --name fb -it -v /opt/data/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml -v /var/logs/:/var/logs/  docker.elastic.co/beats/filebeat:6.5.1
  • kibana
 docker run -itd --rm -p5601:5601 --name kb -v /opt/data/kibana/data:/usr/share/kibana/data -e ELASTICSEARCH_URL=http://xxxxx:9200 kibana:6.5.1
  • Nginx(由于elk没有认证服务所以使用nginx作为认证服务)
  docker run --rm --name ng -v /opt/data/nginx/nginx.conf:/etc/nginx/nginx.conf -v /opt/data/nginx/htpasswd:/etc/nginx/htpasswd -p xx:xx  -itd nginx
新的应用接入
  • 创建日志目录

    在/var/logs/下创建相应的目录 如模块名字叫 xxxx 则新建目录/var/logs/xxxx

    将应用docker镜像中服务日志挂载到 /var/logs/xxxx即可

  • 当前服务器已存在filebeat

    修改当前服务中的filebeat配置文件如下

      - input_type: log
           paths:
             - /var/logs/xxxx/*.log
           tags: ["push"]
    

    重启filebeat

  • 当前服务不存在filebeat
    新起filebeat docker容器 配置如上所述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值