桥下の民 - ELKF
type: channel
link: https://wordplay.work/index.php/category/ELKF
items: Filebeat模块配置详解
items: X-Pack
items: Elasticsearch 安全和权限管理
items: ES配置详解
items: SpringBoot 集成 ELK
items: Beats使用-Filebeat&Metricbeat
items: Beats简介
items: Logstash连接HTTPS访问集群
items: CSV&日志导入到ES
items: ES 添加密码验证

Filebeat模块配置详解
type: item
date: 2024-09-12T09:46:00+00:00
description: 一、关于Filebeat 当你要面对成百上千、甚至成千上万的服务器、虚拟机和容器生成的日志时，请告别 SSH 吧！Filebeat 将为你提供一种轻量型方法，用于转发和汇总日志与文件，让简单的事情不再繁杂。 轻量级日志采集器。 输送至 Elasticsearch 或 Logstash，在 Kibana 中实现可视化。 二、Filebeat如何工作 Filebeat由两个主要组件组成：inputs 和 harvesters。这些组件一起工作以跟踪文件，并将事件数据发送到你指定的输出。 2.1、harvester是什么 一个harvester负责读取一个单个文件的内容。 harvester逐行读取每个文件（一行一行地读取每个文件），并把这些内容发送到输出。 每个文件启动一个harvester。 harvester负责打开和关闭这个文件，这就意味着在harvester运行时文件描述符保持打开状态。 在harvester正在读取文件内容的时候，文件被删除或者重命名了，那么Filebeat会续读这个文件。这就有一个问题了，就是只要负责这个文件的harvester没用关闭，那么磁盘空间就不会释放。默认情况下，Filebeat保存文件打开直到close_inactive到达。 2.2、input是什么 一个input负责管理harvesters，并找到所有要读取的源。 如果input类型是log，则input查找驱动器上与已定义的glob路径匹配的所有文件，并为每个文件启动一个harvester。 每个input都在自己的Go例程中运行。 下面的例子配置Filebeat从所有匹配指定的glob模式的文件中读取行： filebeat.inputs: - type: log paths: - /var/log/*.log - /var/path2/*.log 2.3、Filebeat如何保持文件状态 Filebeat保存每个文件的状态，并经常刷新状态到磁盘上的注册文件（registry）。状态用于记住harvester读取的最后一个偏移量，并确保所有日志行被发送（到输出）。如果输出，比如Elasticsearch 或者 Logstash等，无法访问，那么Filebeat会跟踪已经发送的最后一行，并只要输出再次变得可用时继续读取文件。当Filebeat运行时，会将每个文件的状态新保存在内存中。当Filebeat重新启动时，将使用注册文件中的数据重新构建状态，Filebeat将在最后一个已知位置继续每个harvester。 对于每个输入，Filebeat保存它找到的每个文件的状态。因为文件可以重命名或移动，所以文件名和路径不足以标识文件。对于每个文件，Filebeat存储惟一标识符，以检测文件是否以前读取过。 如果你的情况涉及每天创建大量的新文件，你可能会发现注册表文件变得太大了。 （Filebeat保存每个文件的状态，并将状态保存到registry_file中的磁盘。当重新启动Filebeat时，文件状态用于在以前的位置继续读取文件。如果每天生成大量新文件，注册表文件可能会变得太大。为了减小注册表文件的大小，有两个配置选项可用：clean_remove和clean_inactive。对于你不再访问且被忽略的旧文件，建议您使用clean_inactive。如果想从磁盘上删除旧文件，那么使用clean_remove选项。） 2.4、Filebeat如何确保至少投递一次（at-least-once）？ Filebeat保证事件将被投递到配置的输出中至少一次，并且不会丢失数据。Filebeat能够实现这种行为，因为它将每个事件的投递状态存储在注册表文件中。 在定义的输出被阻塞且没有确认所有事件的情况下，Filebeat将继续尝试发送事件，直到输出确认收到事件为止。 如果Filebeat在发送事件的过程中关闭了，则在关闭之前它不会等待输出确认所有事件。当Filebeat重新启动时，发送到输出（但在Filebeat关闭前未确认）的任何事件将再次发送。这确保每个事件至少被发送一次，但是你最终可能会将重复的事件发送到输出。你可以通过设置shutdown_timeout选项，将Filebeat配置为在关闭之前等待特定的时间。 三、模块 Filebeat模块简化了公共日志格式的收集、解析和可视化。 一个典型的模块（例如，对于Nginx日志）是由一个或多个fileset组成的（以Nginx为例，access 和 error）。 一个fileset包含以下内容： Filebeat 输入配置，其中包含要默认的查找或者日志文件路径。这些默认路径取决于操作系统。Filebeat配置还负责在需要的时候拼接多行事件。 Elasticsearch Ingest Node 管道定义，…

X-Pack
type: item
date: 2024-09-10T07:06:00+00:00
description: 一、X-Pack 概览 1.1、利用 X-Pack 拓展可能性。 X-Pack 是集成了多种便捷功能的单个插件 — security、alerting、monitoring、reporting、graph 探索和 machine learning — 您可以在 Elastic Stack 中放心地使用这些功能。 单就其自身而言，Elastic Stack 就是一款值得考虑的强大工具。X-Pack 将诸多强大功能集合到一个单独的程序包中，更将它带上了一个新的层次。 x-pack是elasticsearch的一个扩展包，将安全，警告，监视，图形和报告功能捆绑在一个易于安装的软件包中，虽然x-pack被设计为一个无缝的工作，但是你可以轻松的启用或者关闭一些功能。 1.2、X-Pack 功能介绍 X-Pack 提供以下几个级别保护elastic集群 1）用户验证 2）授权和基于角色的访问控制 3）节点/客户端认证和信道加密 4）审计 通俗讲解： 安全防护功能：访问验证。 实时监控功能：实时监控集群的CPU、磁盘等负载； 生成报告功能：图形化展示你的集群使用情况。 还有，机器学习等功能。 以上这些都是X-pack的核心功能点。 1.3、xpack演变： 5.X版本之前：没有x-pack，是独立的：security安全,watch查看，alert警告等独立单元。 5.X版本：对原本的安全，警告，监视，图形和报告做了一个封装，形成了x-pack。 6.3 版本之前：需要额外安装。 6.3版本及之后：已经集成在一起发布，无需额外安装，基础安全属于付费黄金版内容。 7 .1版本：基础安全免费。 安全部分免费之前，如何保证基础安全？ 场景一：全部“裸奔”，相信这在国内占据了非常大的比重。 内网部署，不对外提供服务。或者ES作为业务基础支撑，不公网开放9200等常用端口，开放的是业务的服务端口。 可能暴露问题：公司或团队内部开放9200、5601端口，基本head插件、kibana都能连接，极易导致线上索引或数据可能被误删。 场景二：加了简单防护。 一般使用Nginx身份认证+防火墙策略控制。 场景三：整合使用了第三方安全认证方案。 比如：SearchGuard、ReadonlyREST。 场景四：付费购买了Elastic-Xpack黄金版或白金版服务。 一般是银行等土豪大客户，对安全、预警、机器学习等付费功能需求迫切。 二、ES集群配置 2.1、生成证书（非集群可以跳过生成证书步骤） 以3台服务器的集群为例。在服务器1（任选一台服务器生成证书就行）bin目录下执行以下命令生成两个证书： ./elasticsearch-certutil ca ./elasticsearch-certutil cert --ca elastic-stack-ca.p12 两条命令一路回车即可，不需要给秘钥再添加密码。执行完以后会生成两个证书，证书在安装目录bin目录的上一级； 将两个证书移动到安装目录的config目录下（非config目录会报错）； 将服务器1上的两个证书复制到另外两个ES服务器的config目录下； 其实生成证书这个步骤很好理解，ES集群之间需要进行数据同步，当给ES集群设置密码以后，ES集群的各服务器之间互相认可对方，证书就是这个作用。 2.2、修改elasticsearch.yml 在elasticsearch.yml中新增如下配置： xpack.security.enabled: true xpack.license.self_generated.type: basic xpack.security.transport.ssl.enabled: true # 非集群不用增加下面三行 xpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.keystore.path: /xxxx/xxxx/config/elastic-certificates.p12 xpack.security.transport.ssl.truststore.path: /xxxx/xxxx/elasticsearch-7.6.2/config/elastic-certificates.p12 2.3、重启ES服务器 依次重启3台服务器，生产环境ES集群不能停止服务，所以采用每次重启一台，切不可全部停止。 2.4、设置ES账号密码 在服务器1（挑一台服务器执行即可，不需要每台服务器都执行）上ES的bin目录下执行如下命令设置密码： ES内置elastic、apm_system、logstash_system、kibana等内置用户，需要分别为这些账户…

Elasticsearch 安全和权限管理
type: item
date: 2024-09-02T09:25:00+00:00
description: 一、身份验证 Elasticsearch 支持多种身份验证方式，包括基本身份验证、LDAP 身份验证、Active Directory 身份验证和 SAML 身份验证等。 1.1、基本身份验证 1、修改配置文件重启 修改配置文件config/elasticsearch.yml，写入以下配置： xpack.security.enabled: true discovery.type: single-node xpack.security.transport.ssl.enabled: true 2、设置密码 ./bin/elasticsearch-setup-passwords interactive 会为4个用户设置密码： elastic, kibana, logstash_system,beats_system 其中： elastic 账号：内置的超级用户，拥有 superuser 角色。 kibana 账号：用来连接 elasticsearch 并与之通信。Kibana 服务器以该用户身份提交请求以访问集群监视 API 和 .kibana 索引，不能访问 index。 logstash_system 账号：用户 Logstash 在 Elasticsearch 中存储监控信息时使用。 3、修改密码 以下命令将 elastic 密码修改为 “123456”： curl -H "Content-Type:application/json" -XPOST -u elastic 'http://127.0.0.1:9200/_xpack/security/user/elastic/_password' -d '{ "password" : "123456" }' 1.2、基于令牌的身份验证 1、检查许可证类型： 确认你当前的 Elasticsearch 许可证类型。可以通过以下命令检查当前许可证： GET /_license 2、升级到合适的许可证： 试用许可证: 你可以申请一个免费的 30 天试用许可证，它包含所有的 X-Pack 功能。通过以下 API 请求来激活试用许可证： POST /_license/start_trial?acknowledge=true 基于令牌的身份验证允许用户使用访问令牌（access token）来访问 Elasticsearch。访问令牌是一个短期有效的字符串，可以通过用户名和密码获取。在 Elasticsearch中，可以通过以下步骤配置基于令牌的身份验证： 1、获取访问令牌： POST /_security/oauth2/token { “grant_type” : “password”, “username” : “my_admin”, “password” : “mypassword” } 返回的响应中包含访问令牌： { "access_token": "o5GwAxZDNXBXMEVhMlFBU2haOTFsamhzbG53", "type": "Bearer", "expires_in": 1200, "refresh_token": "o5GwAxY3RU1ZSE1VTFJ0cU5UV0tLSXdhdGp3" } 2、使用访问令牌访问 Elasticsearch： curl -H "Authorization: Bearer AAEAAWVsYXN0aWNzZWFyY2gtdG9rZW4tZm9yLWV4YW1wbGU" http://localhost:9200/_cluster/health 1.3、基于证书的身份验证 基于证书的身份验证允许用户使用客户端证书来访问 Elasticsearch。在 Elasticsearch 中，可以通过以下步骤配置基于证书的身份验证： 在 elasticsearch.yml 配置文件中启用基于证书的身份验证： xpack.security.http.ssl.enabled: true xpack.security.http.ssl.client_authentication: required 配置客户端证书和私钥： xpack.security.http.ssl.keystore.path: “http.p12” xpack.security.http.ssl.truststore.path: “http.p12” 使用客户端证书访问 Elasticsearch： curl --cert client.crt --key client.key https://localhost:9200/_cluster/health 1.4 LDAP 身份验证 LDAP 身份验证是一种常见的身份验证方式，它使用 LDAP 目录来存储用户信息和密码。在 El…

ES配置详解
type: item
date: 2024-09-01T13:44:00+00:00
description: 一、elasticsearch.yml cluster.name 配置es的集群名称，默认是elasticsearch，es会自动发现在同一网段下的es，如果在同一网段下有多个集群，就可以用这个属性来区分不同的集群。 node.name 节点名，默认随机指定一个name列表中名字，该列表在es的jar包中config文件夹里name.txt文件中，其中有很多作者添加的有趣名字。 node.master: true 指定该节点是否有资格被选举成为node，默认是true，es是默认集群中的第一台机器为master，如果这台机挂了就会重新选举master。 node.data: true 指定该节点是否存储索引数据，默认为true。 index.number_of_shards 设置默认索引分片个数，默认为5片。 index.number_of_replicas 设置默认索引副本个数，默认为1个副本。 path.conf 设置配置文件的存储路径，默认是es根目录下的config文件夹。 path.data 设置索引数据的存储路径，默认是es根目录下的data文件夹，可以设置多个存储路径，用逗号隔开，例：path.data: /path/to/data1,/path/to/data2 path.work 设置临时文件的存储路径，默认是es根目录下的work文件夹。 path.logs 设置日志文件的存储路径，默认是es根目录下的logs文件夹。 path.plugins 设置插件的存放路径，默认是es根目录下的plugins文件夹。 bootstrap.mlockall: true 设置为true来锁住内存。因为当jvm开始swapping时es的效率会降低，所以要保证它不swap，可以把ES_MIN_MEM和ES_MAX_MEM两个环境变量设置成同一个值，并且保证机器有足够的内存分配给es。同时也要允许elasticsearch的进程可以锁住内存，Linux下可以通过ulimit -l unlimited命令。 network.bind_host 设置绑定的ip地址，可以是ipv4或ipv6的，默认为0.0.0.0。 network.publish_host 设置其它节点和该节点交互的ip地址，如果不设置它会自动判断，值必须是个真实的ip地址。 network.host 这个参数是用来同时设置bind_host和publish_host上面两个参数。 transport.tcp.port 设置节点间交互的tcp端口，默认是9300。 transport.tcp.compress 设置是否压缩tcp传输时的数据，默认为false，不压缩。 http.port: 9200 设置对外服务的http端口，默认为9200。 http.max_content_length 设置内容的最大容量，默认100mb http.enabled 是否使用http协议对外提供服务，默认为true，开启。 gateway.type gateway的类型，默认为local即为本地文件系统，可以设置为本地文件系统，分布式文件系统，Hadoop的HDFS，和amazon的s3服务器，其它文件系统的设置方法下次再详细说。 gateway.recover_after_nodes 设置集群中N个节点启动时进行数据恢复，默认为1。 gateway.recover_after_time: 5m 设置初始化数据恢复进程的超时时间，默认是5分钟。 gateway.expected_nodes: 2 设置这个集群中节点的数量，默认为2，一旦这N个节点启动，就会立即进行数据恢复。 cluster.routing.allocation.node_initial_primaries_recoveries: 4 初始化数据恢复时，并发恢复线程的个数，默认为4。 cluster.routing.allocation.node_concurrent_recoveries: 4 添加删除节点或负载均衡时并发恢复线程的个数，默认为4。 indices.recovery.max_size_per_sec: 0 设置数据恢复时限制的带宽，如入100mb，默认为0，即无限制。 indices.recovery.concurrent_streams: 5 设置这个参数来限制从其它分片恢复数据时最大同时打开并发流的个数，默认为5。 discovery.zen.minimum_master_nodes: 1 设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1，对于大的集群来说，可以设置大一点的值（2-4）。 discovery.zen.ping.timeout: 3s 设置集群…

SpringBoot 集成 ELK
type: item
date: 2024-08-30T01:42:00+00:00
description: 一、方式一 FileBeat + logstash 7.5.1 (docker) + ES (docker) + springboot 日志文件应用方式。 采用 ELFK 架构采集日志，直接读取日志生成的文件，不对 Springboot 的日志任何的修改。也就是 FileBeat 通过读取日志文件位置获取日志内容，然后发送至 logstash，logstash 收到日志后再发送至 ES。 1.1、fileBeat 配置文件 fileBeat 配置文件 filebeat.yml ###################### Filebeat Configuration Example ######################### # This file is an example configuration file highlighting only the most common # options. The filebeat.reference.yml file from the same directory contains all the # supported options with more comments. You can use it as a reference. # # You can find the full configuration reference here: # https://www.elastic.co/guide/en/beats/filebeat/index.html # For more available modules and options, please see the filebeat.reference.yml sample # configuration file. # ============================== Filebeat inputs =============================== filebeat.inputs: # Each - is an input. Most options can be set at the input level, so # you can use different inputs for various configurations. # Below are the input specific configurations. # filestream is an input for collecting log messages from files. - type: log # Unique ID among all inputs, an ID is required. id: my-avicit-id # Change to true to enable this input configuration. enabled: true # Paths that should be crawled and fetched. Glob based paths. paths: #- /var/log/*.log - E:\path\to\logs\*.log # Exclude lines. A list of regular expressions to match. It drops the lines that are # matching any regular expression from the list. # Line filtering happens after the parsers pipeline. If you would like to filter lines # before parsers, use include_message parser. #exclude_lines: ['^DBG'] # Include lines. A list of regular expressions to match. It exports the lines that are # matching any regular expression from the list. # Line filtering happens after the parsers pipeline. If you would like to filter lines # before parsers, use include_message parser. #include_lines: ['^ERR', '^WARN'] # Exclude files. A list of regu…

Beats使用-Filebeat&Metricbeat
type: item
date: 2023-07-05T09:06:00+00:00
description: 一、Filebeat 使用 Filebeat 来收集系统日志，并把日志传入到 Elasticsearch： 打开Kibana，并按照如下的步骤来进行安装： 由于 Filebeat 是 log 相关的，所以需要选择 “Add log data”。对系统（System）日志进行监控，所以，选择 “System logs”: 然后，根据自己运行的平台，分别使用不同的命令来在平台上进行安装： 1.1、下载 Filebeat 执行如下的指令来安装 Filebeat: curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.5.0-darwin-x86_64.tar.gz tar xzvf filebeat-7.5.0-darwin-x86_64.tar.gz cd filebeat-7.5.0-darwin-x86_64/ 1.2、配置 Filebeat 在 Filebeat 的安装目录下，可以发现一个叫做 filebeat.yml 的文件。这个文件就是 filebeat 的配置文件： $ pwd /Users/liuxg/elastic8/filebeat-7.5.0-darwin-x86_64 liuxg-2:filebeat-7.5.0-darwin-x86_64 liuxg$ ls LICENSE.txt fields.yml kibana NOTICE.txt filebeat logs README.md filebeat.reference.yml module data filebeat.yml modules.d 打开 filebeat.yml 文件，并找到如下的部分： output.elasticsearch: hosts: ["<es_url>"] username: "elastic" password: "<password>" setup.kibana: host: "<kibana_url>" 在上面，我们需要把我们的 Elasticsearch 及 Kibana 的 host 地址填上。针对本地的情况，填入 localhost:9200 和 localhost:5601。如果是针对本地安装的 Elastic Stack 来说，这些都是默认的配置，我们甚至不需要做任何的修改。如果我们对我们的 Elasticsearch 已经设置用户名及密码的话，那么请填入你自己的用户名及密码。 Elastic cloud 如下的配置只限于 Elastic Cloud。针对 Elastic cloud，可以避免把用户名及密码写到 filebeat.yml 文件中，可以使用 cloud.id 来及 keystore 管理来帮助实现。 首先在 Terminal 中打入如下的命令： ./filebeat keystore create 接着 ./filebeat keystore add CLOUD_PWD 在这一步拷贝在Cloud中所创建的密码，并粘贴下来。 最后，修改 filebeat.yml 文件。 根据上面的提示，一旦设置好 cloud.id，它将覆盖我们的 output.elasticsearch 中的设置。 可以可以使用同样的方法来创建如下的 key： ./filebeat keystore add CLOUD_ID 通过上面的配置，可以在 filebeat.yml 的文件中使用同样的方法来代替我们的 cloud.id。 另外，可以在不用修改 filebeat.yml 的情况下直接使用命令行参数的方法来进行操作，比如在 setup filebeat时： ./filebeat setup -E cloud.id=\${CLOID_ID} -E cloud.auth=elastic:\${CLOUD_PWD} 请注意上面\字符，它是一个转字符，因为后面的 $ 符号有特别的意义。 1.3、启动/禁止 Filebeat 模块 可以通过如下的命令来展示所有 Filebeat 的模块： ./filebeat modules list 在上面，可以看到 redis 模块已经被成功地启动了。如果想启动 system 模块，可以使用如下的命令： ./filebeat modules enable system 上面的命令的返回结果是： Enabled system 如果想不启动 redis 模块，可以使用如下的命令： ./filebeat modules disable redis 上面的命令的返回结果是： Disabled redis 可以使用如下的命令再次查询启动的模块: 在上面，可以清楚地看到 redis 模块已经被成功地关闭了，取而代…

Beats简介
type: item
date: 2023-07-04T15:09:00+00:00
description: 一、关于Beats 在集中式日志记录中，数据管道包括三个主要阶段：聚合，处理和存储。 在 ELK 堆栈中，传统上，前两个阶段是堆栈工作量 Logstash 的职责。执行这些任务需要付出一定的代价。 由于与 Logstash 的设计有关的内在问题，性能问题变得经常发生，尤其是在复杂的管道需要大量处理的情况下。将 Logstash 的部分职责外包的想法也应运而生，尤其是将数据提取任务转移到其他工具上。 正如本文中所描述的，这个想法首先在 Lumberjack 中体现出来，然后在 Logstash 转发器中体现出来。 最终，在随后的几个开发周期中，引入了新的改进协议，该协议成为现在所谓的 “Beats” 家族的骨干。 Beats 是轻量级（资源高效，无依赖性，小型）和开放源代码日志发送程序的集合，这些日志发送程序充当安装在基础结构中不同服务器上的代理，用于收集日志或指标（metrics）。这些可以是日志文件（Filebeat），网络数据（Packetbeat），服务器指标（Metricbeat）或 Elastic 和社区开发的越来越多的 Beats 可以收集的任何其他类型的数据。 收集后，数据将直接发送到 Elasticsearch 或 Logstash 中进行其他处理。Beats 建立在名为 libbeat 的 Go 框架之上，该框架用于数据转发，这意味着社区一直在开发和贡献新的 Beats。 1.1、Elastic Beats 1、Filebeat 顾名思义，Filebeat 用于收集和传送日志文件，它也是最常用的 Beat。 Filebeat 如此高效的事实之一就是它处理背压的方式 -- 因此，如果它连接的 Logstash 处于繁忙状态，Filebeat 会减慢其读取速率，并在减速结束后加快节奏。Filebeat 几乎可以安装在任何操作系统上，包括作为 Docker 容器安装，还随附用于特定平台（例如 Apache，MySQL，Docker等）的内部模块，其中包含这些平台的默认配置和 Kibana 对象。 2、Packetbeat 网络数据包分析器 Packetbeat 是第一个引入的 Beat。 Packetbeat 捕获服务器之间的网络流量，因此可用于应用程序和性能监视。Packetbeat 可以安装在受监视的服务器上，也可以安装在其专用服务器上。 Packetbeat 跟踪网络流量，解码协议并记录每笔交易的数据。 Packetbeat 支持的协议包括：DNS，HTTP，ICMP，Redis，MySQL，MongoDB，Cassandra 等。 3、Metricbeat Metricbeat 是一种非常受欢迎的 beat，它收集并报告各种系统和平台的各种系统级指标。 Metricbeat 还支持用于从特定平台收集统计信息的内部模块。你可以使用这些模块和称为指标集的 metricsets 来配置 Metricbeat 收集指标的频率以及要收集哪些特定指标。 4、Heartbeat Heartbeat 是用于 “uptime monitoring” 的。本质上，Heartbeat 是探测服务以检查它们是否可访问的功能，例如，它可以用来验证服务的正常运行时间是否符合你的 SLA。 你要做的就是为 Heartbeat 提供 URL 和正常运行时间指标的列表，以直接发送到Elasticsearch 或 Logstash 以便在建立索引之前发送到你的堆栈。 5、Auditbeat Auditbeat 可用于审核 Linux 服务器上的用户和进程活动。 与其他传统的系统审核工具（systemd，auditd）类似，Auditbeat 可用于识别安全漏洞-文件更改，配置更改，恶意行为等。 6、Winlogbeat Winlogbeat 仅会引起Windows系统管理员或工程师的兴趣，因为它是专门为收集 Windows 事件日志而设计的 Beat。 它可用于分析安全事件，已安装的更新等。 7、Functionbeat Functionbeat 被定义为 “serverless” 的发件人，可以将其部署为收集数据并将其发送到 ELK 堆栈的功能。 Functionbeat 专为监视云环境而设计，目前已针对 Amazon 设置量身定制，可以部署为 Amazon Lambda 函数，以从 Amazon CloudWatch，Kinesis 和 SQS 收集数据。 1.2、社区 Beats 开源社区一直在努力开发新的 Beats。可以在 Beat 讨论论坛的 Community Beats 类别中发布问题并讨论问题。目前有超过90个 Beats。如果大家有发现有用的 Beat，可以直接下载并使用。 1.3、Beats在Elastic堆栈中是如何融…

Logstash连接HTTPS访问集群
type: item
date: 2023-07-03T09:02:00+00:00
description: 一、写入数据到ES Logstash 的安装根目录下，创建一个如下的配置文件： logstash.conf input { generator { message => "liuxg" count => 1 } } output { stdout { codec => rubydebug } elasticsearch { hosts => ["https://localhost:9200"] index => "data-%{+YYYY.MM.dd}" user => "elastic" password => "ndktp2Xr2h_*Q6EZfq4t" ssl_certificate_verification => true truststore => "/Users/liuxg/elastic/elasticsearch-8.4.1/config/certs/http.p12" truststore_password => "buSYG3l-R0mdN6pggG76VA" } } 在上面的第一个部分，使用 generator 来生成一个 message。我们在 output 里定义两个输出，一个是 stdout，而另外一个是 elasticsearch output。查阅官方文档，并对它做如上的配置。需要指出的是： hosts：这个是 Elasticsearch 集群的终端地址。你需要根据自己的配置进行修改 index：这个在 Elasticsearch 中创建的索引的名称 user：这个是在 Elasticsearch 中创建的用户。此处使用的是超级用户 elastic，尽管这个在生产环境中是不必要的。 password：这个是上面的 user 用户对应的密码 ssl_certificate_verification：当为 true 时，启动 SSL 检验 truststore：这个是 Elasticsearch 的证书所在的地址 truststore_password：这个是 truststore 的密码 可以根据如下的方式来得到这个密码： $ pwd /Users/liuxg/elastic/elasticsearch-8.4.1 $ ./bin/elasticsearch-keystore list keystore.seed xpack.security.http.ssl.keystore.secure_password xpack.security.transport.ssl.keystore.secure_password xpack.security.transport.ssl.truststore.secure_password $ ./bin/elasticsearch-keystore show xpack.security.http.ssl.keystore.secure_password buSYG3l-R0mdN6pggG76VA 在上面的最后一个命令中它显示了 keystore 的密码。 $ pwd /Users/liuxg/elastic/elasticsearch-8.4.1 $ ./bin/elasticsearch-keystore list keystore.seed xpack.security.http.ssl.keystore.secure_password xpack.security.transport.ssl.keystore.secure_password xpack.security.transport.ssl.truststore.secure_password $ ./bin/elasticsearch-keystore show xpack.security.http.ssl.keystore.secure_password buSYG3l-R0mdN6pggG76VA $ ls config/certs/ http.p12 http_ca.crt transport.p12 在 Logstash 的安装目录下使用如下的方式来进行运行： ./bin/logstash -f logstash.conf 在上面，使用了 http.p12 证书来进行这样的操作。可以使用如下的命令来查看这个证书： $ pwd /Users/liuxg/elastic/elasticsearch-8.4.1 $ ./bin/elasticsearch-keystore list keystore.seed xpack.security.http.ssl.keystore.secure_password xpack.security.transport.ssl.keystore.sec…

CSV&日志导入到ES
type: item
date: 2023-07-03T08:12:00+00:00
description: 一、下载数据 须先得到数据。可以到网址 kaggle.com 进行下载。该网站含有大量的数据可以供下载。 二、Index CSV 文件到 Elasticsearch logstash_cars.config 文件的内容如下： input { file { path => "/Users/liuxg/data/cars.csv" start_position => "beginning" sincedb_path => "/dev/null" } } filter { csv { skip_header => true separator => "," columns => [ "maker", "model", "mileage", "manufacture_year", "engine_displacement", "engine_power", "body_type", "color_slug", "stk_year", "transmission", "door_count", "seat_count", "fuel_type", "date_created", "date_last_seen", "price_eur" ] } mutate { convert => ["mileage", "integer"] } mutate { convert => ["price_eur", "float"] } mutate { convert => ["engine_power", "integer"] } mutate { convert => ["door_count", "integer"] } mutate { convert => ["seat_count", "integer"] } } output { elasticsearch { hosts => "localhost:9200" index => "cars" document_type => "sold_cars" } stdout {} } 这里有几点需要说明的： 由于第一行有一个 header，所以，我们可以设置 skip_header 为 true 来跳过。 在 input 中，我们定义了一个文件，它的 path 指向我们的 csv 文件的位置。start_position 指向 beginning。如果对于- 一个实时的数据源来说，它通常是 ending，这样表示它每次都是从最后拿到那个数据。sincedb_path 通常指向一个文件。这个文件保存上次操作的位置。针对我们的情况，我们设置为 /dev/null，表明，我们不存储这个数据。 在 filter 中，CSV filter 是非常直接的，不太需要很多的解释。这里的 column 都来自于我们的 csv 表格。通常 Logstash 会把每个数据都当做是字符串。针对我们的情况，我们可看到 mileage 是一个整型数，price_eur 是一个浮点数。这些我们都需要进行调整。这个调整我们可以通过 mutate 来完成。 在 output 之中，我们制定本地的 Elasticsearch 为我们的数据库，它的 index 是 cars，同时 document_type 为_doc。我们也同时使用 stdout，这样我们可以在 terminal 屏幕中看出数据在处理之中。 三、装载数据到 Elasticsearch 首先进入到 Logstash 的安装目录，然后打入如下的命令： sudo ./bin/logstash -f ~/data/logstash_cars.config 提示：在运行 Logstash 时使用 -r 标志可让你在更改和保存配置后自动重新加载配置。 在测试新配置时，这将很有用，因为你可以对其进行修改，这样就不必在每次更改配置时都手动启动 Logstash。 然后，可以在屏幕上看到如下的输出： 同时如果这在 Kibana 上可以看到正在 index 的 cars index 数量（count)是一直变化的。 经过一段时间的运行，可以看到屏幕上不再滚动了，表明 Logstash 已经完成了数据的传输。可以在 Kibana 上打入如下的命令： GET cars/_stats 以看到的 cars Index 的统计数据： 可以看到共有 3,167,984 条数据，并且它的大小有 2.466G 这么大的数据。 可以打入如下的命令： GET cars 可以看到 Elasticsearch 已经为我们创建好了 mapping，并且它们的数据类型也可以看到： { "cars" : { "aliases" : { }, "mappings" : { "properties" : { "@t…

ES 添加密码验证
type: item
date: 2023-06-19T07:36:00+00:00
description: 1、使用ES自带的XPACK开启密码校验 在 es7.0 版本以后（之前的版本没怎么用过，不太清楚）安装包默认自带了 xpack 功能，所以只需要在 es 包下的 config 目录修改一下 es 的默认配置文件elasticsearch.yml即可。 在elasticsearch.yml中追加写入以下参数： xpack.security.enabled: true ## 加密方式 xpack.license.self_generated.type: basic xpack.security.transport.ssl.enabled: true 然后重启es让配置文件生效，再到 es 包下 bin 目录执行以下命令： ./elasticsearch-setup-passwords interactive 运行结果如下： 运行完以后则会出现以上界面，先是提醒你，es链接会需要密码，可能会影响现在的使用，再接下来就是会默认的创建6个用户，并让你设置这六个用户的密码（忽略掉用户名，这些用户权限都是相同的） 设置完成以后，这时候再访问 es 的地址，就会提示安全错误信息了，到此，es 的密码设置完成。 2、使用 postman 访问带密码的 当 es 设置完成密码后，就不能再像之前那样随心所欲的访问了，否则会返回安全错误异常。 这时候我们在访问的时候就需要把用户名和密码的认证信息附加上去，如果你平时使用的是curl命令进行操作 es，那么只需要在curl 后增加 –user 用户名:密码 即可，示例如下： curl 172.1.11.x:9200 --user elastic:123456 但是命令行的操作体验很不好，大部分人还是使用 postman 进行请求的，在 postman 中请求加密的es就比较麻烦一点，要在 request head 里新增Authorization参数。 在浏览器中请求 es 的首页，也就是地址加端口，这时候会让你输入用户名和密码，当输入后，会跳转到首页。 然后打开浏览器的调试功能，从该请求中获取到Authorization参数，如下： 因为在 es 的配置文件中，选用的加密方式为 basic，也就是该项xpack.license.self_generated.type: basic， 所以我们也可以对用户名密码进行手动加密，访问 https://www.base64encode.org/ 地址，在输入框中输入elastic:123456，进行加密，并在头部加上Basic字符串就是最终的Authorization的值了，该值与第一种方式获取的是一致的。 获取到Authorization以后，在 postman 进行设置，即可如常访问：