美文网首页ELK
ELK+filebeat+x-pack平台搭建

ELK+filebeat+x-pack平台搭建

作者: Daisy小朋友 | 来源:发表于2019-03-28 18:47 被阅读0次

    概要:

    ELK允许你以任何格式搜索,分析和可视化从任何源生成的日志,这种做法称为集中式日志记录。在尝试识别服务器或应用程序的问题时,集中日志记录非常有用,因为它允许您在一个位置搜索所有日志。它也很有用,因为它允许您通过在特定时间范围内关联其日志来识别跨多个服务器的问题。

    组件:

    Elasticsearch

    是一个基于Apache Lucene(TM)的开源搜索引擎 ,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,RESTful web风格接口,多数据源,自动搜索负载等。

    Logstash

    是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和 Elasticsearch。
    虽然filebeat可以将数据直接发送到elasticseaech数据库,但我们建议先使用Logstash处理数据,这将允许从不用的源数据收集数据,将其转换为通用格式,并将其导出到另一个数据库。logstash配置文件以json格式编写,配置时,可以将logstash作为一个管道,将一端接收数据,以某种方式处理它,并将数据发送到ES,logstash有两个必要的元素,input和output以及一个可选元素filter

    stdin {} 就是从标准输入 stdout {} 就是从标准输出
    在这个字符串中,其实定义了 Logstash 的两个行为input和output。
    在 input 中,我们定义了一个标准输入,由于什么都没有,所以 Logstash 会从终端的标准输入中读取字符串,这也是为什么刚才在输入完命令后会出现等待输入的情况。
    在 output 中,我们定义了一个标准输出,也就是说 Logstash 在处理完后会将结果从标准输出(终端)中输出,而 codec 字段,则说明了输出会遵循什么样的格式,这里定义的 codec 为 rubydebug,所以我们刚才看到了一套标准的输出格式。
    logsatsh
    filter
    grok: 基于正则表达式提供丰富可重用的模式,基于此可以将非结构化数据转换为结构化数据
    date: 将字符串类型的时间字段转换为时间戳类型的,方便后续数处理
    Mutate:进行增删改查替换相关字段
    logstash:位于ELK数据管道的最前端,其作用主要是收集,过滤,分析,输出各种结构化或者非结构化的原始数据(典型的如日志系统),原始数据从“无序变成有序”的重担就落在了logstash的肩上了,因此其作用举足轻重。
    说到Logstash,不得不说其中的 插件机制,其几乎所有的功能都是靠插件来实现的,因此灵活易用:
    关于 数据收集,Logstash 提供了输入插件来支持各种不同的数据源
    关于 数据分析,Logstash 则提供了过滤器插件来支持对输入原始数据的花式处理
    关于 数据输出,Logstash 也提供了各种输出插件,从而支持将结果数据输出到各种地方,比如标准控制台,文件,各种数据库包括 ElasticSearch 等
    
    Logstash其实在整个ELK中环节还蛮重要的,其实可以理解为一个“中间人”的角色。它通过从filebeat中接受数据,然后进行过滤,最后再传输给es。所以一般logstash的配置也包括input,output以及filter的配置。
    
    logstash理解参考>>
    https://segmentfault.com/a/1190000015754162
    
    

    Kibana

    是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。

    filebeat

    轻量级,单用途的数据发送器,可以将数百或数千台计算机的数据发送到logstash或elasticsearch
    beats
    filebeat 日志文件(yaml)
    处理流程:输入input 处理filter 输出output

    x-pack

    X-Pack是一个Elastic Stack的扩展,将安全,警报,监视,报告和图形功能包含在一个易于安装的软件包中
    X-Pack 提供以下几个级别保护elastic集群
    1)用户验证
    2)授权和基于角色的访问控制
    3)节点/客户端认证和信道加密
    4)审计
    通俗讲解:
    安全防护功能:你是不是,不想别人直接访问你的5601,9200端口,这个,x-pack能办到。
    实时监控功能:实时监控集群的CPU、磁盘等负载;
    生成报告功能:图形化展示你的集群使用情况。
    还有,机器学习等功能。
    X-Pack 已经作为 Elastic 公司单独的产品线,前身是 Shield, Watcher, Marvel, Graph, 和 reporting,先来说说这几个爸爸是做什么的吧:

    • Shield: 提供对数据的 Password-Protect,以及加密通信、基于角色的权限控制,IP 过滤,审计,可以有效地:
    • 防止未授权的访问:基于 Password-Protect,基于角色的权限控制,IP过滤;
    • 保证数据的完整性:基于消息认证和 TLS/SSL 加密;
    • 审计跟踪:可以知道谁在什么时候对数据做了什么;
    • Watcher: 提供对数据操作的变更的监控和报警。
    • Marvel: 基于 Kibana 的插件,主要用于监控 ES 集群。可以看到集群的健康状况、实时的性能指标,分析历史集群、索引、节点的指标等。
    • Graph: 用于分析数据间的关系。
    • Reporting: 用于快速生成 Kibana Visualization 和 Dashboard 的报表,可以对生成的时间定制计划,并且可以由某些特定条件触发。

    再来看看我们的儿子 X-Pack 是做啥的,哦,他就是他们的儿子,一个大合集,便于安装、不用为版本兼容性犯愁,可以灵活 disable / enable 其中的各个组件。他还多干了一件事儿,可以监控 Logstash。

    关于免费和收费版本,版本功能比较可以查看:https://www.elastic.co/subscriptions

    免费版本注册地址:https://register.elastic.co/xpack_register

    付费版本(分为黄金、白金级别)购买地址:https://www.elastic.co/subscriptions/xpack

    默认的免费版本有一个月的 trial 试用期。免费版本试用期只包含 ES 集群监控、图分析和可视化,基于角色的 ES 权限控制和搜索用户信息的功能。不包含:

    • 安全组件 Shield:
      • TLS/SSL加密;
      • LDAP的整合;
      • 日志审计;
      • 第三方的认证域整合;
    • 报警组件 Watcher;
    • 报表组件 Reporting;

    总的来说免费版本对于安全组件这块什么都不支持。

    参考:https://www.jianshu.com/p/a49d93212eca
    x-pack尚处于付费版本,适用期限:1个月

    应用场景

    在传统的应用运行环境中,收集、分析日志往往是非常必要且常见的,一旦应用出现问题、或者需要分析应用行为时,管理员将通过一些传统工具对日志进行检查,如cat、tail、sed、awk、perl以及grep。这种做法有助于培养在常用工具方面的优秀技能,但它的适用范围仅限于少量的主机和日志文件类型。

    随着应用系统的复杂性与日俱增,日志的分析也越来越重要,常见的需求包括,团队开发过程中可能遇到一些和日志有关的问题:

    开发没有生产环境服务器权限,需要通过系统管理员获取详细日志,沟通成本高
    系统可能是有多个不同语言编写、分布式环境下的模块组成,查找日志费时费力
    日志数量巨大,查询时间很长

    es历史数据处理:
    hadoop集群,把历史日志都放在hadoop集群上,直接写一个mapreduce想查所长时间就查多长时间的
    elk可以实现但是对于超过半年的索引会关闭掉,为了查询效率

    ELK流程图

    image.png

    调研了ELK技术栈,发现新一代的logstash-forward即Filebeat,使用了golang,性能超logstash,部署简单,占用资源少,可以很方便的和logstash和ES对接,作为日志文件采集组件。所以决定使用ELK+Filebeat的架构进行平台搭建。Filebeat是Beats家族的一员,后续可以使用Packetbeat进行网络数据采集、Winlogbeat进行Windosw事件采集、Heartbeat进行心跳采集、Metricbeat进行系统指标采集。这种架构解决了 Logstash 在各服务器节点上占用系统资源高的问题。相比 Logstash,Beats 所占系统的 CPU 和内存几乎可以忽略不计。另外,Beats 和 Logstash 之间支持 SSL/TLS 加密传输,客户端和服务器双向认证,保证了通信安全。

    各组件承担的角色和功能:
    Elasticsearch:分布式搜索和分析引擎,具有高可伸缩、高可靠和易管理等特点。基于 Apache Lucene 构建,能对大容量的数据进行接近实时的存储、搜索和分析操作。通常被用作某些应用的基础搜索引擎,使其具有复杂的搜索功能;
    Logstash:数据处理引擎,它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到 ES;
    Kibana:数据分析和可视化平台。与 Elasticsearch 配合使用,对数据进行搜索、分析和以统计图表的方式展示;
    Filebeat:ELK 协议栈的新成员,一个轻量级开源日志文件数据搜集器,使用 golang 基于 Logstash-Forwarder 源代码开发,是对它的替代。在需要采集日志数据的 server 上安装 Filebeat,并指定日志目录或日志文件后,Filebeat 就能读取数据,迅速发送到 Logstash 进行解析。
    

    1.准备工作

    环境

    Linux:Centos7.2
    ElasticSearch : elasticsearch-6.7.0
    Logstash : logstash-6.7.0
    kibana:kibana-6.7.0
    JDK: 1.8

    占用端口

    elasticsearch 9200/9300 它跟其他的节点的传输端口为9300,接受HTTP请求的端口为9200
    logstash 9600/5044 5044接收beat数据的端口,9600是logstash API端口
    kibana 5601

    官网下载:

    https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.7.0.tar.gz
    https://artifacts.elastic.co/downloads/kibana/kibana-6.7.0-linux-x86_64.tar.gz
    https://artifacts.elastic.co/downloads/logstash/logstash-6.7.0.tar.gz
    https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.7.0-linux-x86_64.tar.gz

    注意点:
    • 安装Elastic Stack组件需要使用相同的版本
    • elasticsearch的配置文件采用YAML格式,这意味着缩进非常重要,编辑文件时,确保不添加任何额外的空格

    2.系统配置

    创建sudo权限用户
    [root@elk ~]# useradd -d /elk elk
    [root@elk ~]# username=elk
    [root@elk ~]# echo "$username ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/$
    
    操作系统配置

    禁用linux

    [root@elk ~]#vi /etc/sysconfig/selinux 
    将SELINUX=enforcing修改为SELINUX=disabled
    

    安装jdk1.8

    请参考之前博客https://www.jianshu.com/p/1b2b00ceef88
    

    selinux设置

    ====操作系统优化设置====
    [elk@elk config]$ sudo vim /etc/security/limits.conf 
    * soft nproc 65535
    [elk@elk config]$ sudo vim /etc/security/limits.d/20-nproc.conf
    * soft nproc 65535
    

    系统参数配置

    [elk@elk config]$ sudo vim /etc/sysctl.conf
    fs.file-max=655350
    vm.max_map_count=655360
    [elk@elk config]$ sudo sysctl -p
    

    防火墙设置

    //临时关闭
    systemctl stop firewalld
    //禁止开机启动
    systemctl disable firewalld
    

    3.Elasticsearch安装

    安装

    [elk@elk ~]$ tar -xzf elasticsearch-6.7.0.tar.gz
    [elk@elk config]$ cd /elk/elasticsearch-6.7.0/config
    

    es单节点
    修改elasticsearch.yml配置文件

    [elk@elk config]$ vim elasticsearch.yml
    ==设置集群名称==
    17 cluster.name: wp_seclog
    ==设置节点名称==
    23 node.name: ELK-node1
    ==设置数据存储路径==
    34 path.data: /elk/data
    ==设置日志存储路径==
    38 path.logs: /elk/data/logs
    #集群设置==绑定IP地址==
    #56 network.host: 0.0.0.0
    ==绑定端口==
    60 http.port: 9200
    ==集群IP集合== #也可以添加端口
    69 discovery.zen.ping.unicast.hosts: ["192.168.100.203"]
    # 集群设置:多节点
    #69 discovery.zen.ping.unicast.hosts: ["192.168.100.203","hosts2","host3"]
    

    es集群多节点
    已经安装好单个节点,添加多节点时,只需要将es安装包复制到相应的机器上,需要配置集群中的另外节点es-2 和 es-3.配置同es-1,修改一下配置文件里的节点名和地址即可
    如果是集群使用x-pack需要为内部节点通信配置TSL/SSL

    参考:es内部节点安全认证

    image.png
    集群内部证书配置(详细可参考上面连接->es内部节点安全认证)
    cd /elk/elasticsearch-6.7.0
    #创建TSL/SSL证书
    bin/elasticsearch-certutil ca
    bin/elasticsearch-certutil cert --ca config/certs/elastic-stack-ca.p12 --dns 192.168.100.203 --ip 192.168.100.203
    ##创建cert文件夹
    [elk@elk config]$ mkdir -p /elk/elasticsearch-6.7.0/config/certs   
    [elk@elk config]$ ls -al /elk/elasticsearch-6.7.0/config/certs
    -rw------- 1 elk elk 3443 6月  20 10:07 elastic-certificates.p12
    

    注意:如果安装了x-pack但是不配置内部安全通信认证,集群不可用
    集群配置
    wp-node1

    [elk@elk elasticsearch-6.7.0]$ egrep -v '^$|#' config/elasticsearch.yml
    cluster.name: wupao
    node.name: wp-node1
    node.master: true
    path.data: /elk/elasticsearch-6.7.0/data
    path.logs: /elk/elasticsearch-6.7.0/logs
    bootstrap.system_call_filter: false
    network.host: 0.0.0.0
    transport.tcp.compress: true
    http.port: 9200
    discovery.zen.ping.unicast.hosts: ["192.168.100.203", "192.168.100.202","192.168.100.201"]
    discovery.zen.minimum_master_nodes: 2
    xpack.security.enabled: true
    xpack.security.transport.ssl.enabled: true
    xpack.security.transport.ssl.verification_mode: certificate
    xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12 
    xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12 
    

    wp-node2

    -bash-4.2$ egrep -v '^$|#' config/elasticsearch.yml
    cluster.name: wupao
    node.name: wp-node2
    node.master: true
    path.data: /elk/elasticsearch-6.7.0/data
    path.logs: /elk/elasticsearch-6.7.0/logs
    bootstrap.system_call_filter: false
    network.host: 0.0.0.0
    transport.tcp.compress: true
    http.port: 9200
    discovery.zen.ping.unicast.hosts: ["192.168.100.203", "192.168.100.202","192.168.100.201"]
    discovery.zen.minimum_master_nodes: 2
    xpack.security.enabled: true
    xpack.security.transport.ssl.enabled: true
    xpack.security.transport.ssl.verification_mode: certificate
    xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12 
    xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
    

    wp-node3

    -bash-4.2$ egrep -v '^$|#' config/elasticsearch.yml
    cluster.name: wupao
    node.name: wp-node3
    node.master: false 
    path.data: /elk/elasticsearch-6.7.0/data
    path.logs: /elk/elasticsearch-6.7.0/logs
    bootstrap.system_call_filter: false
    network.host: 0.0.0.0
    transport.tcp.compress: true
    http.port: 9200
    discovery.zen.ping.unicast.hosts: ["192.168.100.203", "192.168.100.202","192.168.100.201"]
    discovery.zen.minimum_master_nodes: 2
    xpack.security.enabled: true
    xpack.security.transport.ssl.enabled: true
    xpack.security.transport.ssl.verification_mode: certificate
    xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12 
    xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
    

    注意:
    node.master: false ##注意discovery.zen.minimum_master_nodes: 2 为2两个为true,为1一个为true
    discovery.zen.minimum_master_nodes: 2 ##这个的参数为节点数N/2+1,因为我目前的节点是个,所以为2、所以为2个节点填写为1
    node3添加到集群后,node-master日志中会显示


    image.png

    报错解决
    报错1:因为刚开始是一个节点,后增加了两个节点做集群,添加的方法是直接copy之前的包到新的服务器上
    刚开始遇到无法添加集群的报错:

    [wp-node2] failed to send join request to master [{wp-node1}{MxvGfK7lR6iI_frh_BOzcg}{M_VIMWHFSPmZT9n2D2_fZQ}{192.168.1.203}{192.168.1.203:9300}{ml.machine_memory=16603000832, ml.max_open_jobs=20, xpack.installed=true, ml.enabled=true}], reason [RemoteTransportException[[wp-node1][192.168.1.203:9300][internal:discovery/zen/join]]; nested: IllegalArgumentException[can't add node {wp-node2}{MxvGfK7lR6iI_frh_BOzcg}{gO2EuagySwq9d5AfDTK6qg}{192.168.1.202}{192.168.1.202:9300}{ml.machine_memory=12411887616, ml.max_open_jobs=20, xpack.installed=true, ml.enabled=true}, found existing node } with the same id but is a different node instance]; ]
    

    ith the same id but is a different node instance是因为复制虚拟机时,elsticsearch时,将elsticsearch文件夹下的data文件夹一并复制了。而在前面测试时,data文件夹下已经产生了data数据,于是报上面的错误
    解决办法:删除elsticsearch文件夹下的data文件夹下的节点数据
    报错2:elasticsearch集群搭建报错:

     not enough master nodes discovered during pinging
    

    解决2:
    原因是node.master: true 和discovery.zen.minimum_master_nodes: 2 的数量不匹配,如果为2需要两个几点配置node.master: true

    修改jvm.options配置文件

    [elk@elk config]$ vim jvm.options
    ====修改jvm内存值====
     #按照主机的内存50%进行设置,默认es6.3.2为1g
    -Xms2g
    -Xmx2g
    

    启动

    [elk@elk bin]$ ./elasticsearch -d
    ==查看log信息,检查es启动是否正常==
    [elk@elk logs]$ tail -f /elk/data/logs/
    显示如下,表示启动成功
    [2019-03-28T14:17:00,452][INFO ][o.e.n.Node               ] [HCU8cIa] started
    [2019-03-28T14:17:00,457][INFO ][o.e.g.GatewayService     ] [HCU8cIa] recovered [0] indices into cluster_state
    

    关闭

    直接杀掉进程
    [elk@elk ~]$ jps
    18438 Elasticsearch
    18566 Jps
    [elk@elk ~]$ kill -9 18328
    

    启动报错处理

    报错:
    [2019-03-28T09:38:45,704][ERROR][o.e.b.Bootstrap          ] [secnode-1] node validation exception
    [1] bootstrap checks failed
    [1]: max file descriptors [35536] for elasticsearch process is too low, increase to at least [65536]
    解决:修改最大连接数,刚开始我修改了没生效,重启机器后生效
    

    查看端口

    [elk@elk ~]$ ss -ltnp              
    LISTEN     0      128                      :::9200                                 :::*                   users:(("java",pid=18438,fd=488))
    LISTEN     0      128                      :::9300                                 :::*                   users:(("java",pid=18438,fd=374))
    

    验证

    [elk@elk bin]$ curl 192.168.100.203:9200
    

    健康状态

    [elk@elk ~]$ curl -X GET http://192.168.100.203:9200/_cat/health?v
    epoch      timestamp cluster   status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
    1553766910 09:55:10  wp-seclog green           1         1      0   0    0    0        0             0                  -                100.0%
    

    注意:

    1 network.host: 0.0.0.0 只要不是localhost就是生产模式
    2 http://192.168.100.203:9200/_cat/nodes?v   查看集群状态
    

    Chrome扩展程序


    image.png

    安装完成后打开浏览器


    image.png
    安装完集群后显示为
    image.png

    4.logstash安装

    解压

    [elk@elk bin]$tar -xzf logstash-6.7.0.tar.gz
    [elk@elk bin]$ cd /elk/logstash-6.7.0/bin/
    

    测试

    进行数据测试,启动完成后输入hello 看能否正常输出
    [elk@elk bin]$ ./logstash -e 'input { stdin{} } output { stdout{ codec => rubydebug} }'          
    hello
    Sending Logstash's logs to /elk/logstash-6.7.0/logs which is now configured via log4j2.properties
    [2019-03-28T14:38:25,111][INFO ][logstash.modules.scaffold] Initializing module {:module_name=>"fb_apache", :directory=>"/elk/logstash-6.7.0/modules/fb_apache/configuration"}
    [2019-03-28T14:38:25,129][INFO ][logstash.modules.scaffold] Initializing module {:module_name=>"netflow", :directory=>"/elk/logstash-6.7.0/modules/netflow/configuration"}
    [2019-03-28T14:38:25,334][INFO ][logstash.setting.writabledirectory] Creating directory {:setting=>"path.queue", :path=>"/elk/logstash-6.7.0/data/queue"}
    [2019-03-28T14:38:25,340][INFO ][logstash.setting.writabledirectory] Creating directory {:setting=>"path.dead_letter_queue", :path=>"/elk/logstash-6.7.0/data/dead_letter_queue"}
    [2019-03-28T14:38:25,811][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified
    [2019-03-28T14:38:25,850][INFO ][logstash.agent           ] No persistent UUID file found. Generating new UUID {:uuid=>"780df64b-8158-495f-a366-8e4bdbff21c7", :path=>"/elk/logstash-6.7.0/data/uuid"}
    [2019-03-28T14:38:26,455][INFO ][logstash.runner          ] Starting Logstash {"logstash.version"=>"6.7.0"}
    [2019-03-28T14:38:26,949][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}
    [2019-03-28T14:38:29,594][INFO ][logstash.pipeline        ] Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>32, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50}
    [2019-03-28T14:38:29,742][INFO ][logstash.pipeline        ] Pipeline started successfully {:pipeline_id=>"main", :thread=>"#<Thread:0xd7dc89c run>"}
    The stdin plugin is now waiting for input:
    [2019-03-28T14:38:29,834][INFO ][logstash.agent           ] Pipelines running {:count=>1, :pipelines=>["main"]}
    {
          "@version" => "1",
        "@timestamp" => 2019-03-28T06:38:29.828Z,
              "host" => "elk",
           "message" => "hello"
    }
    

    配置conf文件,将数据传送到ES

    [elk@elk config]$ cd /elk/logstash-6.7.0/config/
    vim logstash-simple.conf(创建logstash的配置文件,6.7.0版本无此文件需自行创建)
    input { stdin { } }
    output 
    {
          elasticsearch { hosts => ["192.168.100.203:9200"] }
          stdout { codec => rubydebug }
    }
    

    启动

    [elk@elk config]$ cd /elk/logstash-6.7.0/bin/
    [elk@elk bin]$ nohup ./bin/logstash -f config/logstash.conf >/dev/null 2>&1 &
    

    查看日志

    [elk@elk logs]$ cd /elk/logstash-6.7.0/logs
    [elk@elk logs]$ tail -f  less logstash-plain.log 
    

    端口

    [root@elk /]# ss -ltnp
    LISTEN     0      50               ::ffff:127.0.0.1:9600                                       :::*                   users:(("java",pid=18987,fd=88))
    

    配置示例:

    [elk@elk config]$ cat logstash.conf 
    # Sample Logstash configuration for creating a simple
    # Beats -> Logstash -> Elasticsearch pipeline.
    
    input {
        beats {
            port => 5044
       }
    }
    
    output{
        if [fields][env] == "wiki"{                                 
            stdout {codec => rubydebug}
            elasticsearch {
               hosts => "192.168.100.203:9200"
               manage_template => false
               index => "wiki-%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
               document_type => "%{[@metadata][type]}"
           }
     
         }
     
        if [fields][env] == "jira"{                            
            stdout {codec => rubydebug}
            elasticsearch {
               hosts => "192.168.100.203:9200"
               manage_template => false
               index => "jira-%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
               document_type => "%{[@metadata][type]}"
           }
        }
    
        if [fields][env] == "fisheye"{                            
            stdout {codec => rubydebug}
            elasticsearch {
               hosts => "192.168.100.203:9200"
               manage_template => false
               index => "fisheye-%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
               document_type => "%{[@metadata][type]}"
           }
        }
    
        if [fields][env] == "crowd"{                            
            stdout {codec => rubydebug}
            elasticsearch {
               hosts => "192.168.100.203:9200"
               manage_template => false
               index => "crowd-%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
               document_type => "%{[@metadata][type]}"
           }
        }
    
        if [fields][env] == "jenkins"{                            
            stdout {codec => rubydebug}
            elasticsearch {
               hosts => "192.168.100.203:9200"
               manage_template => false
               index => "jenkins-%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
               document_type => "%{[@metadata][type]}"
           }
        }
    }
    [elk@elk config]$ pwd
    /elk/logstash-6.7.0/config
    

    5.kibana安装

    解压

    [elk@elk ~]$ tar -xzf kibana-6.7.0-linux-x86_64.tar.gz
    [elk@elk ~]$ mv kibana-6.7.0-linux-x86_64 kibana-6.7.0
    

    修改配置文件

    [elk@elk kibana-6.7.0]$ cd /elk/kibana-6.7.0/config/
    [elk@elk config]$ vim kibana.yml
     2 server.port: 5601
     #kibana IP
     7 server.host: "192.168.100.203"
     #es ip
     28 elasticsearch.url: "http://192.168.100.203:9200"
     elasticsearch.username: "kibana"
     elasticsearch.password: "xxxxxx"
    

    启动

    nohup /elk/kibana-6.7.0/bin/kibana > /dev/null 2>&1 &
    

    端口

    [root@elk /]# ss -ltnp
    LISTEN     0      128                                                         192.168.1.203:5601                                                                                *:*  
    

    相关术语

    kibana
    discover:数据搜索查看
    visualize:图标制作
    dashboard:仪表盘制作
    timelion:时序数据的高级可视化分析
    devtools:开发者工具
    
    术语
    document:文档数据
    index:索引
    type:索引中的数据类型
    field字段:文档的属性
    query dsl:查询语言
    
    es CRUD
    create:创建文档
    read:读取文档
    update:更新文档
    delete:删除文档
    kibana->开发工具-创建
    GET _search
    {
      "query": {
        "match_all": {}
      }
    }
    
    ##create
    POST /accounts/persion/1
    {
      "name":"daisy",
      "lastname":"Doe",
      "jobdescription":"Systens"
    }
    #read
    GET accounts/persion/1
    #update
    POST /accounts/persion/1/_update
    {
      "doc":{
        "jobdescription":"Linux"
      }
    }
    #delete
    DELETE accounts/persion/1
    
    #query string查询方式1
    Get /accounts/persion/_search?q=daisy
    
    #query DSL 查询方式2
    GET accounts/persion/_search
    {
      "query":{
        "term":{
          "name":{
            "value":"daisy"
          }
        }
      }
    }
    

    6.x-pack安装

    6.1安装:

    cd /elk/elasticsearch-6.7.0/bin && ./elasticsearch-plugin install x-pack
    cd /elk/logstash-6.7.0/bin/ && ./logstash-plugin install x-pack
    cd cd /elk/kibana-6.7.0/bin/ && ./kibana-plugin install x-pack
    提示:
    ERROR: this distribution of Elasticsearch contains X-Pack by default   表示es的x-pack包默认已安装
    Logstash now contains X-Pack by default, there is no longer any need to install
    it as it is already present.
    ERROR: Invalid pack for: x-pack, reason: x-pack not an installable plugin, message: x-pack not an installable plugin      表示logstash的x-pack包默认已安装
    Plugin installation was unsuccessful due to error "Kibana now contains X-Pack by default, there is no longer any need to install it as it is already present."   表示kibana的x-pack包默认已安装
    

    6.2破解

    参考:https://www.linuxea.com/1895.html
    破解包下载:51下载
    license申请:申请license
    时间戳:https://tool.lu/timestamp/

    6.2.1将破解包下载下来,包含下面两个文件(重写x-pack的两个类)

    -rw-rw-r-- 1 elk  elk     4786 3月  21 15:34 LicenseVerifier.class
    -rw-rw-r-- 1 elk  elk     2893 3月  21 15:34 XPackBuild.class
    

    6.2.2 找到目标jar包

    /elk/elasticsearch-6.7.0/modules/x-pack-core/x-pack-core-6.7.0.jar
    

    6.2.3 替换jar包

    为了能够分辨清楚,创建old,解压jar包
    [elk@elk old]$ jar -xf x-pack-core-6.7.0.jar
    -rw-rw-r-- 1 elk elk     994 3月  21 15:34 logstash-index-template.json
    drwxrwxr-x 2 elk elk    4096 3月  21 15:34 META-INF
    -rw-rw-r-- 1 elk elk    1247 3月  21 15:34 monitoring-alerts.json
    -rw-rw-r-- 1 elk elk   24213 3月  21 15:34 monitoring-beats.json
    -rw-rw-r-- 1 elk elk   32309 3月  21 15:34 monitoring-es.json
    -rw-rw-r-- 1 elk elk    5899 3月  21 15:34 monitoring-kibana.json
    -rw-rw-r-- 1 elk elk   11787 3月  21 15:34 monitoring-logstash.json
    drwxrwxr-x 3 elk elk    4096 3月  21 15:34 org
    -rw-rw-r-- 1 elk elk     294 3月  21 15:34 public.key
    -rw-rw-r-- 1 elk elk     556 3月  21 15:34 rollup-dynamic-template.json
    -rw-rw-r-- 1 elk elk    1859 3月  21 15:34 security_audit_log.json
    -rw-rw-r-- 1 elk elk    6038 3月  21 15:34 security-index-template.json
    -rw-rw-r-- 1 elk elk     893 3月  21 15:34 triggered-watches.json
    -rw-rw-r-- 1 elk elk    1391 3月  21 15:34 watches.json
    -rw-rw-r-- 1 elk elk   19869 3月  21 15:34 watch-history.json
    替换jar包中的 LicenseVerifier.class,XPackBuild.class两个类文件
    cp -a LicenseVerifier.class old/org/elasticsearch/license/
    cp -a XPackBuild.class old/org/elasticsearch/xpack/core/
    打包
    [elk@elk old]$jar -cvf x-pack-core-6.7.0.jar
    将打包好的x-pack-core-6.7.0.jar替换之前的/elk/elasticsearch-6.7.0/modules/x-pack-core/x-pack-core-6.7.0.jar目标jar包
    

    6.2.4申请license并上传
    根据上面的连接申请license,认真填写邮箱,用来接收json文件,country写china,其它都可以随便写,点击申请后邮箱会马上收到一个邮件
    “type”:“basic” 替换为 “type”:"platinum" # 基础版变更为铂金版
    “expiry_date_in_millis”:1561420799999 替换为 “expiry_date_in_millis”:3107746200000# 一个月变为50年
    大概格式:

    {"license":{
        "uid":"2651b126-fef3-480e-ad4c-a60eb696a733",
        "type":"platinum", # 白金
        "issue_date_in_millis":1533513600000,
        "expiry_date_in_millis":3107746200000, # 到期时间
    .............................
    

    当修改了时间和白金类型后,来到 Management 选择 License Management,点击update license上传以及修改好的License

    image.png

    如上图,如果提示错误,注意修改打开elasticsearch.yml 配置文件 加入 xpack.security.enabled: false,或者执行“ 启动x-pack功能”再更新
    破解成功后显示


    image.png

    6.3启动x-pack功能:

    es集群配置x-pack

    6.3.1 开启es的登录功能,注意使用普通用户

    [elk@elk old]$ cd /elk/elasticsearch-6.7.0/
    bin/elasticsearch-setup-passwords interactive   ##注意修改elastic/kibana等账号的密码,elastic是登录es的最高权限账号
    修改elasticsearch.yml配置:
    cat /elk/elasticsearch-6.7.0/config/elasticsearch.yml
    #添加如下2行,打开安全配置功能
    xpack.security.enabled: true
    xpack.security.transport.ssl.enabled: true
    

    6.3.2 修改kibana.yml配置

    cat /elk/kibana-6.7.0/config/kibana.yml
    #添加如下两行
    29 elasticsearch.username: "kibana"
    30 elasticsearch.password: "your passwd"
    

    此处修改完,重启es和kibana服务就需要登录账号和密码了


    image.png

    6.3.3 修改logstash.yml配置

    219 xpack.monitoring.enabled: true
    220 xpack.monitoring.elasticsearch.username: logstash_system
    221 xpack.monitoring.elasticsearch.password: your passwd
    222 xpack.monitoring.elasticsearch.hosts: ["http://192.168.100.203:9200"]
    

    配置logstash.conf时要添加用户名密码,如

    配置 5044 端口作为 Filebeat 的连接和创建 ES 索引,保存在 config 目录:
    [elk@elk config]$ cat logstash-sample.conf 
    # Sample Logstash configuration for creating a simple
    # Beats -> Logstash -> Elasticsearch pipeline.
    
    input {
      beats {
        port => 5044
      }
    }
    
    output {
      elasticsearch {
        hosts => ["http://192.168.100.203:9200"]
        index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
        user => "elastic"
        password => "your passwd"
      }
    }
    

    Logstash 使用该配置使用 ES 的索引,和 Filebeat 做的事情是一样的,不过拥有了额外的缓存以及强大丰富的插件库。
    启动 logstash :
    ./bin/logstash -f config/logstash-sample.conf &
    此时开启filebeat,就可以在es中查看到log了

    参考:https://segmentfault.com/a/1190000010981283

    7.filebeat安装

    安装

    [root@zabbix data]# tar -xzf filebeat-6.7.0-linux-x86_64.tar.gz
    [root@zabbix data]# cd filebeat-6.7.0-linux-x86_64/
    

    修改配置文件
    注意:

      enabled: true        ##true
      paths:
        -  /confluence/confluence_home/logs/catalina.out  #填写具体的日志路径
      reload.enabled: true   ##true
     fields:
       env: wiki      ##名称
      output.logstash:
        hosts: ["IP:5044"]    ##注意输出到logstash中,需要填写logstash的IP和端口
    
    [root@zabbix data]# vim filebeat.yml
    filebeat.inputs:
    - type: log
      enabled: true       
      paths:
        -  /confluence/confluence_home/logs/catalina.out
    fields:
      env: wiki
    filebeat.config.modules:
      path: ${path.config}/modules.d/*.yml
      reload.enabled: true
    setup.template.settings:
      index.number_of_shards: 3
    setup.kibana:
    output.logstash:
        hosts: ["IP:5044"]
    processors:
      - add_host_metadata: ~
      - add_cloud_metadata: ~
    

    启动

    测试是否正常
    ./filebeat -configtest -e
    启动
    nohup ./filebeat -c ./filebeat.yml -e >/dev/null 2>filebeat.log &
    

    打开kibana控制台可以看到


    image.png

    注意:

    如果数据无法传输要手动加载模板
    在 Elasticsearch 中, Index Pattern 用于定义字段应如何分析的设置和映射。Filebeat 的默认 Index Pattern 由软件包安装。 如果在 filebeat.yml 配置文件中接受模板加载的默认配置,则 Filebeat 在成功连接到Elasticsearch后会自动加载模板。 如果模板已存在,默认不会覆盖,但是可以通过配置进行覆盖。如果要禁用自动模板加载,或者要加载自己的模板,可以在Filebeat配置文件中更改模板加载的设置。 如果选择禁用自动模板加载,则需要手动加载模板。
    配置模板加载 - 仅Elasticsearch输出支持。
    手动加载模板 - Logstash输出所需。
    由于我们需要的是输出到 Logstash,所以我们使用手动模板加载:
    curl -XPUT 'http://192.168.100.203:9200/_template/filebeat' -d@/data/filebeat-6.7.0-linux-x86_64/kibana/6/index-pattern/filebeat.json
    
    

    8.kibana汉化

    参考:https://github.com/anbai-inc/Kibana_Hanization

    汉化方法(6.x)

    • 拷贝此项目中的translations文件夹到您的kibana目录下的src/legacy/core_plugins/kibana/目录。若您的kibana无此目录,那还是尝试使用此项目old目录下的汉化方法吧。
    • 修改您的kibana配置文件kibana.yml中的配置项:i18n.locale: "zh-CN"
    • 重启Kibana,汉化完成

    9.Q&&A

    • filebeat 数据一直传输不过去
    运行filebeat时,log中显示:
    2019-04-04T10:58:39.928+0800    INFO    log/input.go:138    Configured paths: [/var/log/logstash/logstash-slowlog-plain*.log]
    2019-04-04T10:58:39.929+0800    INFO    log/input.go:138    Configured paths: [/var/log/logstash/logstash-plain*.log]
    查看/opt/filebeat-6.7.0-linux-x86_64/modules.d,发现logsatsh模块时打开的
    ./filebeat modules disable logstash
    关闭后再次执行就会发送到配置文件中的logstash中了
    多个log注意配置logstash
    
    • filebeat修改index默认名称,filebeat到es(单个)

    参考:filebeat

    默认值为 "filebeat-%{[beat.version]}-%{+yyyy.MM.dd}"
     # Array of hosts to connect to.
     hosts: ["localhost:9200"]
     index: "api-access-%{+yyyy.MM.dd}"
    setup.template:
     name: 'api-access'
     pattern: 'api-access-*'
     enabled: false
    
    filebeat修改index默认名称,filebeat到es(多个)
    

    10. 参考

    原理>>
    elk常用架构以及场景介绍
    https://www.ibm.com/developerworks/cn/opensource/os-cn-elk-filebeat/index.html
    elk协议栈介绍
    https://www.ibm.com/developerworks/cn/opensource/os-cn-elk/
    安装>>
    https://segmentfault.com/a/1190000010975383
    grok学习>>
    https://www.elastic.co/guide/en/kibana/7.1/xpack-grokdebugger.html
    http://grokconstructor.appspot.com/
    http://grokdebug.herokuapp.com/ 调试工具
    https://zhuanlan.zhihu.com/p/26399963
    http://docs.flycloud.me/docs/ELKStack/logstash/get-start/install.html
    Elasticsearch权威指南中文版>>
    https://es.xiaoleilu.com/030_Data/25_Update.html
    ELK安全加固:https://shuwoom.com/?p=2846
    日志收集原理

    相关文章

      网友评论

        本文标题:ELK+filebeat+x-pack平台搭建

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