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容器 配置如上所述

### 搭建ELK日志平台的方法 搭建ELK(Elasticsearch, Logstash, Kibana)日志平台是一个复杂但非常有价值的任务,它能够提供强大的日志收集、处理和可视化能力。以下是关于如何搭建ELK日志平台的具体方法: #### 1. 准备工作 在开始之前,需要确认操作系统的兼容性和硬件资源是否满足需求。通常推荐使用CentOS或Ubuntu作为基础操作系统[^2]。 #### 2. 安装Java环境 由于Elasticsearch和Logstash都需要JDK支持,因此第一步是安装合适的Java版本。可以通过以下命令完成: ```bash mkdir -p /usr/local/jdk1.8 tar -zxf jdk-8u391-linux-x64.tar.gz -C /usr/local/jdk1.8 --strip-components=1 vi /etc/profile export JAVA_HOME=/usr/local/jdk1.8 export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$JAVA_HOME/bin:$PATH source /etc/profile java -version ``` 这一步骤确保了Java环境被正确设置并生效[^4]。 #### 3. 安装Elasticsearch Elasticsearch用于存储和索引日志数据。可以按照官方文档下载对应的版本,并通过解压的方式部署。例如: ```bash wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.2.0-linux-x86_64.tar.gz tar -xzf elasticsearch-7.2.0-linux-x86_64.tar.gz -C /usr/local/ ln -s /usr/local/elasticsearch-7.2.0 /usr/local/elasticsearch cd /usr/local/elasticsearch/config vim elasticsearch.yml ``` 编辑`elasticsearch.yml`文件以调整集群名称和其他参数[^2]。 #### 4. 安装Logstash Logstash负责接收来自不同来源的日志并将它们发送至Elasticsearch进行存储。同样可以从官网获取最新稳定版: ```bash wget https://artifacts.elastic.co/downloads/logstash/logstash-7.2.0-linux-x86_64.tar.gz tar -xzf logstash-7.2.0-linux-x86_64.tar.gz -C /usr/local/ ln -s /usr/local/logstash-7.2.0 /usr/local/logstash ``` 接着配置Pipeline文件来定义输入源、过滤器以及输出目标[^3]。 #### 5. 配置Filebeat Filebeat是一款轻量级的数据传输工具,适合用来监控本地文件变化并向Logstash或者直接向Elasticsearch推送更新内容。其基本配置如下所示: ```yaml filebeat.inputs: - type: log paths: - /var/log/*.log output.logstash: hosts: ["localhost:5044"] ``` 注意要匹配好各个组件之间的协议端口等细节[^1]。 #### 6. 启动服务 依次启动各部分的服务程序,先开启Elasticsearch再打开Logstash最后才是Kibana界面展示层。 ```bash nohup /usr/local/elasticsearch/bin/elasticsearch & nohup /usr/local/logstash/bin/logstash -f /path/to/pipeline.conf & systemctl start kibana.service ``` #### 7. 使用Kibana访问管理 浏览器访问http://<server-ip>:5601进入图形化控制台,在这里你可以创建仪表盘、查询特定字段值等等高级功能[^3]。 --- ### 注意事项 整个过程中需特别留意所有软件间的版本一致性问题以免出现不兼容情况影响正常使用效果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值