1.elasticsreach的安装及配置

官网下载指定版本的es,对照jdk版本筛选合适的es版本,官网地址:https://www.elastic.co/downloads/past-releases?product=elasticsearch

选择对应的操作系统即可。

配置elasticsearch.yml

network.host: 0.0.0.0
discovery.type: single-node
xpack.security.enabled: false

如果涉及中文字段查询,最好提取配置好ik分词器,提高查询速度

ik分词器下载地址:https://release.infinilabs.com/

选择和es相同的版本进行下载,在elasticsearch下的plugins目录下新建ik目录,将分词 器里面的内容全部解压进去,注意不要把带版本的分词器文件夹拷贝进去,只要里面的文件和目录,例如这样

然后将分词器里面的config文件拷贝到elasticsearch下面的config里面,.xml和.dic全部拷贝进去。

之后就可以启动es服务了,进入bin,这里以win系统举例,直接点击elasticsearch.bat即可,注意:如果是linux系统,新版本的es做了限制,root用户无法启动服务,最好创意一个专门用于启动es的用户,并设置密码。访问地址:localhost:9200

2.kibana 安装及配置

这个服务主要用于管理和监控elasticsearch服务,是一个图形化的web系统。作用等同于nativcat。

官网下载

选择与elasticsearch相同的版本下载。

kibana内置nodesjs环境,无需搭建环境。

config文件夹下配置kibana.yml文件,配置es服务访问地址:

elasticsearch.hosts: ["http://127.0.0.1:9200"]

在bin文件夹下找到kibana.bat点击启动,等待一段时间即可。

访问地址:localhost:5601

3.logstash 安装及配置

logstash主要用于数据同步与采集,将要进行搜索的数据同步进es中。

下载:

将下载好的压缩包解压后,进入到config目录,编写采集配置文件

新建一个global_search.conf文件,打开编辑

input {
  jdbc {
    jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
    jdbc_driver_library => "D:/logstash-7.17.28/dbdrivers/mysql-connector-j-8.0.31.jar"
    jdbc_connection_string => "jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&allowMultiQueries=true&useInformationSchema=true"
    jdbc_user => "root"
    jdbc_password => "root"
    
    # 关键:添加 table_name 字段标记来源
    statement => "SELECT *, 'mytablename' AS table_name FROM mytablename"
    schedule => "*/5 * * * *"
  }
}

添加input部分,数据来源部分,这里以mysql数据库为例,jdbc_driver_library为数据库位置,需要自己手动添加对应驱动。statement,具体查询,一个input对应一个表,如果多表的话,可以添加多个input模块。scheldule,定时执行,logstash还可以配置增量,这里以简单定时任务举例。

添加filter过滤模块(可选)

filter {
    #将其转换为字符串以确保 ES document_id 兼容性。
    mutate {
        convert => { "id" => "string" } 
    }
}
最后添加output,输出模块,输出到es里面

output {
  elasticsearch {
    hosts => ["localhost:9200"] 
    # 所有数据都发送到 global-search 索引
    index => "global-search" 
    
    # 构造唯一的 document_id: [表名]_[主键值]
    document_id => "%{[table_name]}_%{id}" 
   
    
    # 1. 模板名称
    template_name => "global_template"
    
    # 2. 模板文件路径
    template => "D:/logstash-7.17.28/config/template.json" 
    # 3. 模板覆盖:确保 Logstash 覆盖任何旧的同名模板
    template_overwrite => true
  }

   # stdout { codec => rubydebug } 
}

hosts:es服务地址

index:具体存放数据的索引位置

document_id:文档id,这里采用tablename+id来组成文档唯一id

template_name:模版名称,用与数据格式映射转换,这里采用动态模版配置,提前将ik分词器配置到具体列里面

下面开始创建模版文件,同一目录下,创建template.json文件,点击编辑:

{
  "index_patterns": ["global-search"],
  "settings": {}, 
  "mappings": {
    "dynamic_templates": [
      {
        "name_field_template": {
          "match": "name",
          "mapping": {
            "type": "text",
            "analyzer": "ik_max_word",
            "search_analyzer": "ik_smart",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          }
        }
      },
      {
        "strings_as_keywords": {
          "match_mapping_type": "string",
          "mapping": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          }
        }
      }
    ],
    "properties": {
      "table_name": { "type": "keyword" },
      "id": { "type": "integer" }
    }
  }
}

这里面配置了name字段为ik分词器,模版对应的索引为global-search,注意与global_search.conf里面的index对应上。

然后进入bin目录,打开cmd,输入logstash.bat -f ../config/global_search.conf,启动服务。等服务启动成功,打开kibana可视化界面

点击devtool,在命令行界面输入

GET /_template/global_template

如果模版格式合适,logstash在启动是会自动上传模版,这里会成功搜索到。

返回数据中含有:

"mappings" : {
      "dynamic_templates" : [
        {
          "name_field_template" : {
            "mapping" : {
              "search_analyzer" : "ik_smart",
              "analyzer" : "ik_max_word",
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "ignore_above" : 256,
                  "type" : "keyword"
                }
              }
            },
            "match" : "name"
          }
        },

可以看到name字段成功设置了ik分词器,模版上传成功。等logstash指定定时任务的时候,会自动创建模版里面配置的索引,无需手动创建索引。

数据同步后,可以通过kibana来进行查看。

打开StackManagement,点击index Managemet,数据正确同步后,自动创建的索引在这里面可以查到。

然后点击Index Patterns,点击右上角的create

Name输入和索引名一样的名称,global-search,右边可以看到具体对应的索引。点击Timestamp field选择@timestamp,Create index pattern进行创建。

创建完后再Home列下选择Discover。

选择我们刚创建的,可以看到所有数据,总数和某一时间es数据入库情况。

4.metricbeat 安装及配置

如果还想搭建一个可以监控logstash等服务运行状态的,可以安装这个服务,该服务主要用于监控其他各服务状态。

下载参考上面其他服务👆

在metricbeat目录下,创建logstash-xpack.yml文件

# Docs: https://www.elastic.co/guide/en/beats/metricbeat/master/metricbeat-module-logstash.html
 
- module: logstash
 
  metricsets:
 
   - node
 
   - node_stats
 
  xpack.enabled: true
 
  period: 10s
 
  hosts: ["http://localhost:9600"]
 
  #username: "user"
 
  #password: "secret"

添加上面的配置后,运行如下命令,使得配置生效,hosts:logstash的端口地址,如果没有特别设置,默认就是9600端口。

./metricbeat modules enable logstash-xpack

编辑metricbeat.yml文件

output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["127.0.0.1:9200"]

添加es服务地址后保存退出。

然后启动metricbeat服务

./metricbeat -e

打开kibana界面,打开

该界面后,看到logstash已经被正确加载进来了。

至此,整个ELK环境算是搭建完成啦~

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐