美文网首页
ELK5.5+Filebeat分布式日志系统

ELK5.5+Filebeat分布式日志系统

作者: 殷临风 | 来源:发表于2017-07-27 00:35 被阅读722次

    最近在用k8s管理项目, 每个容器都会打印自己的日志, 目前的解决方案是用nfs4在线文件系统统一存储, 考虑到性能问题, 还是将日志打印到宿主机, 然后通过elk分布式日志收集. 但如果在每台服务器部署logstash是比较耗资源的, 毕竟是java项目. 好在作者重新用golang写了一套新的采集工具filebeat, 性能更高, 暂用资源也更少, 所以这里在每台服务器部署filebeat采集日志, 然后统一缓存到redis, 而elk所在的服务器通过logstashredis里面取数据, 然后发送给elasticsearch分析, 通过kibana显示

    此图是盗用别人的, 但能够很好的展示流程, 所以自己就不画了

    一. 日志服务器配置

    下载二进制文件到/mnt挂在目录

    # 进入挂载目录  
    cd /mnt
    # 创建elk文件夹
    mkdir elk
    
    # 下载elasticsearch
    wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.1.tar.gz
    # 下载kibana
    wget https://artifacts.elastic.co/downloads/kibana/kibana-5.5.1-linux-x86_64.tar.gz
    # 下载logstash
    wget https://artifacts.elastic.co/downloads/logstash/logstash-5.5.1.tar.gz
    
    # 分别解压
    tar -zxvf elasticsearch-5.5.1.tar.gz
    tar -zxvf kibana-5.5.1.tar.gz
    tar -zxvf logstash-5.5.1.tar.gz
    
    # 移动到elk目录
    mv elasticsearch-5.5.1 elk/elasticsearch
    mv kibana-5.5.1 elk/kibana
    mv logstash-5.5.1 elk/logstash
    
    1.配置Elasticsearch
    # 进入目录(`ES_HOME`所在的目录)
    cd /mnt/elk/elasticsearch
    # 安装X-Pack
    bin/elasticsearch-plugin install x-pack
    
    # 编辑配置文件
    vi config/elasticsearch.yml
    # 头部添加
    #################################################
    cluster.name: yinnote-elastic
    network.host: 127.0.0.1
    #################################################
    

    cluster.name 集群的名称
    network.host 服务监听地址, 最好设置成本机, 没有必要对外开放
    http.port 默认9200
    path.logs 默认ES_HOME/logs
    path.data 默认ES_HOME/data

    # 启动(daemon方式)
    bin/elasticsearch -d
    

    配置登录认证, 从5.5版本开始, Shield已经集成到X-Pack, 不需要额外安装

    # 配置elastic账号的密码(第一次执行需要输入默认密码 changeme )
    curl -XPUT -u elastic 'localhost:9200/_xpack/security/user/elastic/_password'
    -H "Content-Type: application/json" -d '{
        "password" : "123456"
    }'
    
    # 配置kibana账号的密码
    curl -XPUT -u elastic 'localhost:9200/_xpack/security/user/kibana/_password'
    -H "Content-Type: application/json" -d '{
        "password" : "123456"
    }'
    
    # 配置logstash_system账号的密码
    curl -XPUT -u elastic 'localhost:9200/_xpack/security/user/logstash_system/_password'
    -H "Content-Type: application/json" -d '{
        "password" : "123456"
    }'
    
    # 生成密钥
    bin/x-pack/syskeygen
    

    注意这个密钥的证书只有一个月的时间, 如果想长期使用, 大家可以自己找方法...

    # 修改配置文件, 重启
    vi config/elasticsearch.yml
    # 添加密钥支持
    #################################################
    xpack.security.audit.enabled: true
    #################################################
    # 重启Elasticsearch
    kill -9 [pid]
    bin/elasticsearch -d
    
    2.配置Kibana
    # 进入目录(KIBABA_HOME所在的目录)
    cd /mnt/elk/kibana
    # 安装X-Pack
    bin/kibana-plugin install x-pack
    
    # 配置文件
    vi config/kibana.yml
    # 头部添加
    #################################################
    server.host: "0.0.0.0"
    elasticsearch.username: "elastic"
    elasticsearch.password: "123456"
    #################################################
    

    server.port 对外端口, 默认5601
    server.host 对外监听ip, 如果有nginx代理, 可以设置成127.0.0.1
    elasticsearch.url es地址, 默认http://127.0.0.1:9200
    elasticsearch.username elastic账号
    elasticsearch.password elastic密码

    # 启动
    bin/kibana
    
    3.配置Logstash

    模式一: 从filebeat获取采集数据

    # 进入目录(LOGSTASH_HOME所在的目录)
    cd /mnt/elk/logstash
    # 创建配置文件
    vi client-http.conf
    # 添加
    #################################################
    input {
        beats {
            port => 5044
            codec => "json"
        }
    }
    output {
        elasticsearch {
            hosts => ["127.0.0.1:9200"]
            index => "logstash-nginx-error-%{+YYYY.MM.dd}"
            user => "elastic"
            password => "123456"
        }
        stdout {codec => rubydebug}
    }
    #################################################
    
    # 启动服务(监听模式, 便于查看数据)
    bin/logstash -f client-http.conf
    

    模式二: 从redis获取采集数据

    # 创建配置文件
    vi client-redis.conf
    # 添加
    #################################################
    input {
        redis {
            host => "127.0.0.1"
            port => "6379"
            key => "filebeat"
            data_type => "list"
            password => "redis的密码"
            threads => 20
        }
    }
    output {
        elasticsearch {
            hosts => ["127.0.0.1:9200"]
            index => "logstash-nginx-error-%{+YYYY.MM.dd}"
            user => "elastic"
            password => "123456"
        }
        stdout {codec => rubydebug}
    }
    #################################################
    
    # 启动服务(监听模式, 便于查看数据)
    bin/logstash -f client-http.conf
    

    二. 客户端数据采集配置

    # 下载安装
    cd /mnt
    wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.5.1-linux-x86_64.tar.gz
    tar -zxvf filebeat-5.5.1-linux-x86_64.tar.gz
    mv filebeat-5.5.1-linux-x86_64 filebeat
    # 进入目录
    cd filebeat
    

    模式一: 通过RESTful接口发送数据 (同Logstash模式一对应)

    # 创建配置文件
    vi client-http.yml
    # 添加
    #################################################
    filebeat.prospectors:
    
    - input_type: log
      paths:
        - /mnt/logs/nginx/error.log
      fields:
        feature: nginx-err
      multiline:
        pattern: '^\['
        negate: true
        match: after
    
    output.logstash:
      hosts: ["yinnote.com:5044"]
    #################################################
    # 启动服务(监听模式, 便于查看数据)
    ./filebeat -e -c client-http.yml
    

    模式二: 通过Redis接口发送数据 (同Logstash模式二对应)

    # 创建配置文件
    vi client-redis.yml
    # 添加
    #################################################
    filebeat.prospectors:
    
    - input_type: log
      paths:
        - /mnt/logs/nginx/error.log
      fields:
        feature: nginx-err
      multiline:
        pattern: '^\['
        negate: true
        match: after
    
    output.redis:
      hosts: ["yinnote.com"]
      password: "redis的密码"
    #################################################
    # 启动服务(监听模式, 便于查看数据)
    ./filebeat -e -c client-redis.yml
    

    input 相关:
    fields 可以自定义多个键值对, 便于在kibana后台筛选日志
    multiline 设置多行支持, 对于很多异常日志, 不是单行显示的, 这个让一段报错日志打成一条记录

    output 相关:
    hosts 指定redis地址, 默认端口是6379, 如果需要指定其他端口, 直接在地址后面加, 如yinnote.com:26379, v5.5版本已经不支持port参数
    db 可省略, 默认 0
    key 可省略, 默认 filebeat
    datatype, 可省略, 默认 list

    访问后台

    1. 浏览器访问  http://yinnote.com:5601
    
    2. 输入elastic用户和密码即可登录
    
    3. 点击左侧的 discover 菜单, 即可查看日志采集情况
    

    时间比较匆忙, 写得比较简洁, 这里主要是介绍最精简的配置方式部署, 所以很多配置参数没有介绍, 另外关于Elasticsearch集群的部署没有介绍, 后续会专门写一篇.

    相关文章

      网友评论

          本文标题:ELK5.5+Filebeat分布式日志系统

          本文链接:https://www.haomeiwen.com/subject/zviokxtx.html