ElasticSearch+Logstash+Kibana初探

ELK环境部署

部署的版本需要统一,否则可能会有兼容性问题,使用6.8.0.
外网访问需要放行 5601 9200 9300 三个端口
ElasticSearchLogstash不建议部署同台服务器

  • 默认中间件都安装在 /usr/local/elk下(没有的话新建目录 mkdir /usr/local/elk),点此处下载(链接: https://pan.baidu.com/s/1J-fOALTN4YzbV-gqJZ_HJQ 密码: t133

1. ElasticSearch

  • ES不能使用root用户启动,需要新建用户

useradd esuser;
chown -R esuser:esuser /usr/local/elk/elasticsearch-6.8.0;
su esuser;

  1. 上传安装包elasticsearch-6.8.0.tar.gz/usr/local/elk下,解压tar -zxvf elasticsearch-6.8.0.tar.gz
  2. 进入解压完的目录elasticsearch-6.8.0,启动ES。

sh bin/elasticsearch -d

  1. 查看启动日志有无报错信息

tail -300f logs/elasticsearch.log

  1. 上述步骤没有问题,验证环境是否正常。

服务器验证:curl localhost:9200
或者浏览器访问:ip:9200

若访问返回一个JSON串,则启动成功!

{
  "name" : "yAp2S0u",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "7z3A7GQWS0ipoMWmDSa0jw",
  "version" : {
    "number" : "6.8.0",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "65b6179",
    "build_date" : "2019-05-15T20:06:13.172855Z",
    "build_snapshot" : false,
    "lucene_version" : "7.7.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

若没有类似的返回结果,查看日志排查。
备注:第4步中若服务器正常,浏览器访问不了,在确认服务器防火墙对92009300的不限制的情况下,需要配置服务的host

    # 配置 network.host: 0.0.0.0   
    vi config/elasticsearch.yml
  • 安装ik分词插件

可以在线/离线安装,这里使用离线安装

  • 离线安装

在线安装的 6.8.0使用过程中有问题,版本有bug,使用离线6.6.1版本可以正常使用

  1. ES安装目录下的plugins新建ik文件夹,把elasticsearch-analysis-ik-6.6.1.zip上传至文件夹中
  2. 解压上面的文件 unzip elasticsearch-analysis-ik-6.6.1.zip,需要修改版本对应信息,修改plugin-descriptor.properties
    version=6.8.0
    elasticsearch.version=6.8.0
    
  3. 重启ES

在线安装(暂时不使用在线方式安装6.x版本)

  1. 进入ES安装的目录下,执行下面的语句
    ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.8.0/elasticsearch-analysis-ik-6.8.0.zip
  2. 重启ES

    sh bin/elasticsearch -d

  3. 验证
    • 创建索引
    curl -XPUT http://localhost:9200/test
    
    • 测试分词器
    curl -XPOST http://localhost:9200/test/_analyze -H 'Content-Type:application/json' -d'
    {
     "analyzer": "ik_max_word",
     "text":["我是测试数据,中文分词ik!"]
    }
    '
    
    返回结果正常分词则配置分词成功
  • 开启安全登录

单机部署无需去配置ssl,但配置文件需要开启,集群部署需要

  1. 查杀 elasticsearch 进程

    • jps 找到对应任务的pid
    • kill -9 ${pid}
  2. 在根目录找到config文件夹,进入该文件夹,编辑配置文件

    vim elasticsearch.yml
    在末尾添加
    xpack.security.enabled: true
    xpack.security.transport.ssl.enabled: true

  3. 重新启动 elasticsearch

    sh bin/elasticsearch -d

  4. 为默认账号手动设置密码(出现y/n,选y就行),以后登录需要使用

    sh bin/elasticsearch-setup-passwords interactive

2. Kibana

  1. 解压

    上传安装包kibana-6.8.0-6.8.0.tar.gz/usr/local/elk下,解压tar -zxvf kibana-6.8.0-6.8.0.tar.gz
    点此处下载(链接: https://pan.baidu.com/s/1J-fOALTN4YzbV-gqJZ_HJQ 密码: t133

  2. 编辑配置文件,添加elasticsearch用户登录名、密码

    进入解压文件夹目录,vim config/kibana.yml

    elasticsearch.username: "kibana"
    # 安装ES时设置的对应的账号密码
    elasticsearch.password: "your_password"
    
  3. 启动

    nohup sh bin/kibana &

  4. 验证

    • 打开浏览器,访问ip:5601,跳转kibana登录验证界面即为安装成功。输入设置的内置账号密码登录即可

    内置账号:elastic、kibana、logstash_system、beats_system、apm_system、remote_monitoring_user
    elastic 账号可管理用户设置(kibana->Management->Users)

    • 点击DevTools的控制台
    POST test003/_doc
    {
     "city2":"我和我的家乡上映!"
    }
    
    GET test003/_search
    
    

    GET有返回结果,说明环境正常。

**备注:**ES服务正常,kibana启动也无ERROR日志,浏览器不能访问,5601端口也无防火墙隔离,需要设置host

# 设置 server.host: "0.0.0.0"
vi config/kibana.yml

3. Logstash

  • 安装
  1. 上传安装包logstash-6.8.0.tar.gz/usr/local/elk下,解压tar -zxvf logstash-6.8.0.tar.gz,点此处下载(链接: https://pan.baidu.com/s/1J-fOALTN4YzbV-gqJZ_HJQ 密码: t133
  2. 上传logstash-task-config-test.zip压缩文件至/usr/local/elk/logstash-6.8.0,解压文件unzip logstash-task-config-test.zip
  3. 解压完后会多次三个文件夹drivertemplatetask,需要修改task目录下所有子目录里的config.cfg
  4. 进入解压完的目录logstash-6.8.0,配置模板(主要设置分词器)
    1. 创建模板文件夹 mkdir template
    2. 创建模板配置 vi template/logstash.json
       {
        "template": "*",
        "version": 60001,
        "settings": {
            "index.refresh_interval": "5s",
            "number_of_shards": 3,
            "number_of_replicas": 0
        },
        "mappings": {
            "_default_": {
                "date_detection": true,
                "numeric_detection": true,
                "dynamic_templates": [{
                    "string_fields": {
                        "match": "*",
                        "match_mapping_type": "string",
                        "mapping": {
                            "type": "text",
                            "norms": false,
                            "analyzer": "ik_max_word",
                            "fields": {
                                "keyword": {
                                    "type": "keyword"
                                }
                            }
                        }
                    }
                }],
                "properties": {
                    "@timestamp": {
                        "type": "date"
                    },
                    "@version": {
                        "type": "keyword"
                    },
                    "longContent": {
                        "type": "text"
                    },
                    "geoip": {
                        "dynamic": true,
                        "properties": {
                            "ip": {
                                "type": "ip"
                            },
                            "location": {
                                "type": "geo_point"
                            },
                            "latitude": {
                                "type": "half_float"
                            },
                            "longitude": {
                                "type": "half_float"
                            }
                        }
                    }
                }
            }
        }
       }
    
    
  5. 在安装目录下创建任务执行的文件夹,用于存放向ES 写数据的任务
    1. 创建 task文件夹,mkdir task
    2. 按不同的搜索种类创建二级子目录,这里以创建小应用搜索搜索为例
      mkdir task/searchTest
    3. 进入task/searchTest文件夹下面,需要创建 date.datconfig.cfgexcute.sql三个文件
      • date.dat 存储增量变化的值。如按时间进行增量同步,这里就是保存最新的增量时间。在第一次呢做全量同步的时候,可以手动指定一个比当前数据都小的过去时间

        --- '1970-01-01 00:00:00'
        
      • config.cfg 任务执行的配置文件

        input {
              stdin {
              }
              jdbc {
                  #数据库连接地址(需要替换地址)
                  jdbc_connection_string => "jdbc:mysql://ip:3306/test"
                  #用户名
                  jdbc_user => "root"
                  #密码
                  jdbc_password => "0.123abc"
                  #指定数据库驱动jar(需要替换地址)(建议使用绝对路径,相对试过没成功)
                  jdbc_driver_library => "/usr/local/elk/logstash-6.8.0/driver/mysql-connector-java-5.1.44.jar"
                  #驱动类名称
                  jdbc_driver_class => "com.mysql.jdbc.Driver"
                  #数据查询分页配置
                  jdbc_paging_enabled => "true"
                  jdbc_page_size => "50000"
                  #时区设置
                  jdbc_default_timezone => "Asia/Shanghai"
                  #是否开始小写转化 false使用sql中的字段名称,不改变大小写
                  lowercase_column_names => false
                  #开启记录最后一次的增量字段值
                  record_last_run => true
                  #使用sql自定义的字段
                  use_column_value => true
                  #自定义增量字段名称(需要替换地址)
                  tracking_column => "updateTime"
                  #字段类型
                  tracking_column_type => "timestamp"
                  #最后一次增量字段保存的值(需要替换地址)(可以指定文件设置默认值 ---#{value})
                  last_run_metadata_path => "/usr/local/elk/logstash-6.8.0/task/searchTest/date.dat"
                  
                  #指定执行sql文件(需要替换地址)
                  statement_filepath => "/usr/local/elk/logstash-6.8.0/task/searchTest/excute.sql"
                  schedule => "* * * * *"
                  #任务名称(需要替换地址)(唯一性)
                  type => "searchTest"
              }
            }
            output {
              elasticsearch {
                  # ES服务地址(需要替换地址)
                  hosts => "ip:9200"
                  user => "elastic"
                  # 密码 (需要替换地址)
                  password => "yourPassword"
                  #ES对应索引名称(没有索引会按照默认的规则新建)
                  index => "searchTest"
                  #文档ID属性(可以用sql语句中的字段名,若不写,系统自动创建UUID)
                  document_id => "%{id}"
                  #ES索引创建的模板属性(可设置默认分词器等)
                  template_name => "logstash"
                  template => "/usr/local/elk/logstash-6.8.0/template/logstash.json"
                  template_overwrite => true
                  manage_template => true
              }
              
              # 控制台输出(可省略)
              stdout {
                  codec => rubydebug
              }
            }                                                                        
        
      • excute.sql

        字段需要设置别名,以驼峰方式命名。:sql_last_value 这个是在config.cfg文本中所配置的增量字段,可以是ID或者时间来标识这个数据是否是增量同步。

        SELECT
                id as id,
                app_name AS appName,
                update_time as updateTime
        FROM
                app
        WHERE  update_time > :sql_last_value
        
  6. 编辑 config/pipelines.yml流水线配置,有多个任务可以配置多个流水线任务,id是唯一就行
#搜索任务流水配置
- pipeline.id: serachTest
  path.config: "/usr/local/elk/logstash-6.8.0/task/searchTest/config.cfg"
  1. 启动 sh bin/logstash

    启动失败,配置没有问题,可能是配置文件格式中格式或者空格导致的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值