0%

Mac下安装使用ELK

Elasticsearch是与名为Logstash的数据收集和日志解析引擎以及名为Kibana的分析和可视化平台一起开发的,这三个产品被设计成一个集成解决方案,称为Elastic Stack(旧称ELK stack)。它是一种能够从任意数据源抽取数据,并实时对数据进行搜索、分析和可视化展现的数据分析框架。ELK主要的作用是将日志数据进行标准化、集中化管理,最终达到可视化的效果。

Elasticsearch

一、概念

      Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。它是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用ElasticSearch的水平伸缩性,能使数据在生产环境变得更有价值。

      Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。ElasticSearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。

      Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。

原理

  • 用户将数据提交到Elastic Search数据库中
  • 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据
  • 当用户搜索数据时候,再根据权重将结果排名,打分,并将返回结果呈现给用户

二、安装使用

  1. 源码安装

    • 官网下载

    • 选择对应的环境

    • 下载完成后解压到某个目录,如/usr/local/elk-es-7.4.0

    • 进入安装目录并启动cd /usr/local/elk-es-7.4.0/bin && ./elasticsearch

      • 报错,一般都是权限问题,修改目录权限sudo chown -R user:group /usr/local/es
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      ./elasticsearch
      Exception in thread "main" java.nio.file.AccessDeniedException: /usr/local/elk-es-7.4.0/config/jvm.options
      at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:90)
      at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
      at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116)
      at java.base/sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:219)
      at java.base/java.nio.file.Files.newByteChannel(Files.java:374)
      at java.base/java.nio.file.Files.newByteChannel(Files.java:425)
      at java.base/java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:420)
      at java.base/java.nio.file.Files.newInputStream(Files.java:159)
      at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:61)
    • 访问:localhost:9200,有如下输出则表示安装成功

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    {
    "name" : "xxxxx",
    "cluster_name" : "elasticsearch",
    "cluster_uuid" : "RqiPZ9ehTJ-JNeHv80p4cQ",
    "version" : {
    "number" : "7.4.0",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "22e1767283e61a198cb4db791ea66e3f11ab9910",
    "build_date" : "2019-09-27T08:36:48.569419Z",
    "build_snapshot" : false,
    "lucene_version" : "8.2.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
    },
    "tagline" : "You Know, for Search"
    }
    • 查看索引信息http://127.0.0.1:9200/_cat/indices
    • 查看节点信息http://127.0.0.1:9200/_cat/nodes
    • 查询所有索引http://127.0.0.1:9200/_all
    • 查询指定索引http://127.0.0.1:9200/index_name/_search?pretty
  2. brew安装

    • 添加安装源 brew tap elastic/tap
    • 开始安装 brew install elastic/tap/elasticsearch-full
    1
    2
    3
    启动 brew service start elasticsearch
    关闭 brew service stop elasticsearch
    重启 brew service restart elasticsearch

brew tap讲解

  1. brew tap可以为brew的软件的跟踪、更新、安装添加更多的的tap formulae,该命令的仓库源默认来至于Github。
  2. 相关命令
    • brew tap <user>/<repo>:在本地对这个https://github.com/user/repo仓库上做了一个浅度的克隆,完成后即可正常install/uninstall
    • brew tap <user>/<repo> URL:在本地对这个URL仓库上做了一个浅度的克隆(仓库不一定是github)
    • brew untap <user>/<repo> [<user>/<repo> <user>/<repo> ...]:移除已经安装的tap

三、参考

  1. 参考一
  2. 参考二

Logstash

一、概念

      Logstash是一款开源的数据收集引擎,具备实时管道处理能力。它可以作为数据源与数据存储分析工具之间的桥梁,结合Elasticsearch以及Kibana等,能够方便的进行数据处理与分析。另外,它插件众多,可以接受几乎各种各样的数据,包括日志、网络请求、关系型数据库、传感器或物联网等等。

      Logstash是一个具有实时管道功能的开源数据收集引擎,主要用于日志的收集与解析,它可以动态地将来自不同数据源的数据统一起来,并将数据标准化到指定的目的地(多为Elasticsearch,进而提供全文搜索的功能)。

      Logstash能够动态地采集、转换和传输数据,不受格式或复杂度的影响。利用Grok从非结构化数据中派生出结构,从IP地址解码出地理坐标,匿名化或排除敏感字段,并简化整体处理过程。

二、安装使用

  1. 使用brew安装,省略

  2. 源码安装

    • 官网下载对应平台的安装包(版本要与Elasticsearch、Kibana一直)
    • 解压到自定义位置/usr/local/elk-log-7.4.0
    • cd /usr/local/elk-log-7.4.0
    • 创建配置文件logstash.conf参考文档
    1
    2
    3
    4
    5
    input { stdin { } }
    output {
    elasticsearch { hosts => ["localhost:9200"] }
    stdout { codec => rubydebug }
    }
    • 启动服务bin/logstash -f logstash.conf
    1
    2
    3
    4
    The stdin plugin is now waiting for input:
    ...
    ...
    Successfully started Logstash API endpoint {:port=>9600}
    • logstash.conf的输入是标准输入,即此时输入的任何信息都会被实时打印出来

三、参考

  1. 参考一

Kibana

一、概念

      Kibana是一个开源分析和可视化平台,旨在可视化操作Elasticsearch,可以用来搜索、查看和与存储在Elasticsearch索引中的数据进行交互,轻松地进行高级数据分析,并可在各种图表,表格和地图中显示数据。其简单的基于浏览器的界面使您能够快速创建和共享动态仪表板,实时显示Elasticsearch查询的更改。

      Kibana是一款基于Apache开源协议的可视化平台,使用JavaScript语言编写,为Elasticsearch提供分析和可视化的Web平台。它可以在 Elasticsearch的索引中查找,交互数据,并生成各种维度的表图。

使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Usage: bin/kibana [command=serve] [options]

Kibana is an open and free, browser based analytics and search dashboard for Elasticsearch.

Commands:
serve [options] Run the kibana server
help <command> Get the help for a specific command

"serve" Options:

-e, --elasticsearch <uri1,uri2> Elasticsearch instances
-c, --config <path> Path to the config file, use multiple --config args to include multiple config files (default: ["/usr/local/elk-kibana-7.12.0/config/kibana.yml"])
-p, --port <port> The port to bind to
-q, --quiet Prevent all logging except errors
-Q, --silent Prevent all logging
--verbose Turns on verbose logging
-H, --host <host> The host to bind to
-l, --log-file <path> The file to log to
--plugin-dir <path> A path to scan for plugins, this can be specified multiple times to specify multiple directories (default: ["/usr/local/elk-kibana-7.12.0/plugins"])
--plugin-path <path> A path to a plugin which should be included by the server, this can be specified multiple times to specify multiple paths (default: [])
--plugins <path> an alias for --plugin-dir
--optimize Deprecated, running the optimizer is no longer required
-h, --help output usage information

二、安装使用

  1. 安装
    • 使用brew安装,省略
    • 源码安装
      • 官网下载对应平台的安装包
      • 解压到自定义位置/usr/local/elk-kib-7.4.0
      • cd /usr/local/elk-kib-7.4.0
      • 启动./bin/kibana
        • 默认配置文件/usr/local/elk-kib-7.4.0/config/kibana.yml
  2. 使用
    • 汉化(7+版本支持)
      • 编辑kibana.yml,加入i18n.locale: "zh-CN"
      • 重启./bin/kibana
    • 设置登录密码
      • 编辑kibana.yml,加入i18n.locale: "zh-CN"

三、参考

  1. 参考一
  2. 参考二
  3. 参考三
  4. 参考四

Filebeat

一、概念

      在ELK Stack中,日志数据采集有单独的工具,就是Logstash和Beats。Logstash主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式,一般工作方式为C/S架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往Elasticsearch上去。

      Logstash是一款开源的数据收集引擎,具备实时管道处理能力。它可以作为数据源与数据存储分析工具之间的桥梁,结合Elasticsearch以及Kibana等,能够方便的进行数据处理与分析。另外,它插件众多,可以接受几乎各种各样的数据,包括日志、网络请求、关系型数据库、传感器或物联网等等。

      Beats是一个轻量级日志采集器,使用Golang实现,包含多个成员,其中的Filebeat用于代替早期ELK架构中Logstash占用资源过高的问题,或收集转发日志。

  • Packetbeat:网络数据(收集网络流量数据)
  • Metricbeat:指标(收集系统、进程和文件系统级别的CPU和内存使用情况等数据)
  • Filebeat:日志文件(收集文件数据)
  • Winlogbeat:windows事件日志(收集Windows事件日志数据)
  • Auditbeat:审计数据(收集审计日志)
  • Heartbeat:运行时间监控(收集系统运行时的数据)
  • Journalbeat:读取收集journald日志
  • Functionbeat:收集、传送、监测来自云服务的相关数据

工作原理:Filebeat由两个主要组件组成:harvester和prospector。

采集器harvester的主要职责是读取单个文件的内容。读取每个文件,并将内容发送到 the output。 每个文件启动一个 harvester,harvester 负责打开和关闭文件,这意味着在运行时文件描述符保持打开状态。如果文件在读取时被删除或重命名,Filebeat 将继续读取文件。

查找器 prospector 的主要职责是管理 harvester 并找到所有要读取的文件来源。如果输入类型为日志,则查找器将查找路径匹配的所有文件,并为每个文件启动一个 harvester。每个 prospector 都在自己的 Go 协程中运行。

使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Usage:
filebeat [flags]
filebeat [command]

Available Commands:
enroll Enroll in Kibana for Central Management
export Export current config or index template
generate Generate Filebeat modules, filesets and fields.yml
help Help about any command
keystore Manage secrets keystore
modules Manage configured modules
run Run filebeat
setup Setup index template, dashboards and ML jobs
test Test config
version Show current version info

Flags:
-E, --E setting=value Configuration overwrite
-M, --M setting=value Module configuration overwrite
-N, --N Disable actual publishing for testing
-c, --c string Configuration file, relative to path.config (default "filebeat.yml")
--cpuprofile string Write cpu profile to file
-d, --d string Enable certain debug selectors
-e, --e Log to stderr and disable syslog/file output
--environment environmentVar set environment being ran in (default default)
-h, --help help for filebeat
--httpprof string Start pprof http server
--memprofile string Write memory profile to this file
--modules string List of enabled modules (comma separated)
--once Run filebeat only once until all harvesters reach EOF
--path.config string Configuration path
--path.data string Data path
--path.home string Home path
--path.logs string Logs path
--plugin pluginList Load additional plugins
--strict.perms Strict permission checking on config files (default true)
-v, --v Log at INFO level

二、安装使用

  1. 安装
    • 使用brew安装,省略
    • 源码安装
      • 官网下载对应平台的安装包(版本要与Elasticsearch、Kibana一直)
      • 解压到自定义位置/usr/local/elk-filebeat-7.4.0
      • cd elk-filebeat-7.4.0
      • 编辑filebeat.yml
      • 启动sudo ./filebeat -e -c filebeat.yml
        • 报错Exiting: error loading config file: config file ("/opt/filebeat/filebeat.yml") can only be writable by the owner but the permissions are "-rwxrwxrwx" (to fix the permissions use: 'chmod go-w /opt/filebeat/filebeat.yml')
        • 解决sudo chmod 755 filebeat.yml
        • 重新启动sudo ./filebeat -e -c filebeat.yml
          • 报错:Exiting: setup.template.name and setup.template.pattern have to be set if index name is modified
          • 编辑filebeat.yml,加入setup.template.namesetup.template.pattern

            测试配置文件是否有语法错误:./filebeat test config,正常会返回Config OK

重度洁癖者一般会把配置文件单独存放,测试配置./filebeat test config -c config/movies.yml

  1. 使用

    • 方式一:Filebeat + Elasticsearch

      • ①准备好csv数据源(*有彩蛋*),可通过MySQL导出或下载,本文数据源/Users/liuyulong/elk/ml-latest-small/movies.csv

      • ②修改filebeat.yml,实际使用时一般会启动多个实例,可通过添加多个配置文件并分别启动即可

        • cp filebeat.yml config/movies.yml
        • cd config && sudo vim movies.yml
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        filebeat.inputs:
        - type: log
        enabled: true
        paths:
        - /Users/liuyulong/elk/ml-latest-small/movies.csv

        output.elasticsearch:
        hosts: ["localhost:9200"]
        index: "filebeat-movies"

        setup.template.name: "filebeat-movies"
        setup.template.pattern: "filebeat-moveis-*"
        setup.ilm.enabled: false #不设置此选项则自定义的索引名不生效
      • ③启动实例./filebeat -e -c config/movies.yml

      • ④访问Elasticsearchhttp://localhost:9200/_cat/indices?v

        • 此时你会发现Elasticsearch无任何索引信息,这是因为filebeat只会采集最近更新的日志
      • ⑤依次执行mv movies.csv movie.csvmv movie.csv movies.csv,此时访问http://localhost:9200/_cat/indices?v

    • 方式二:Filebeat + Logstash + Elasticsearch

    • 方式三:Filebeat + Kafka + Logstash + Elasticsearch

三、参考

  1. 参考一
  2. 参考二
  3. 参考三
  4. 参考四
  5. 参考五