ELK简单部署与使用

一.部署es

1.获取镜像
docker pull elasticsearch:7.14.0

2.启动并设置内存大小
docker run -d --name=es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m"  elasticsearch:7.14.0

3.配置es
#进入es容器内容
docker exec -it es /bin/bash
#修改es配置文件
vi /usr/share/elasticsearch/config/elasticsearch.yml
#添加以下配置,允许跨域
http.cors.enabled: true
http.cors.allow-origin: "*

4.安装ik分词器
#下载对应版本IK分词器,本次安装Elasticsearch为7.14.0,下载elasticsearch-analysis-ik-7.14.0.zip
,若下载不成功,则直接去官网下载,用xftp传到服务器
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.2.0/elasticsearch-analysis-ik-7.14.0.zip

#解压到ik文件夹
unzip elasticsearch-analysis-ik/releases -d ./ik/
#将本机ik文件夹导入docker es容器中
docker cp ./ik es:/usr/share/elasticsearch/plugins/ 
#重启es
docker restart es 
#校验es 
curl localhost:9200 

二.部署kibana

1.获取镜像
docker pull kibana:7.14.0

2.运行kibana
docker run -d --name kibana -p 5601:5601 kibana:7.14.0

3.配置汉化及设置连接es
docker exec -it kibana /bin/bash
#最后一行添加 i18n.locale: "zh-CN"
vi /usr/share/kibana/config/kibana.yml
#添加以下内容
i18n.locale: "zh-CN"
#将改配置设置为自己机器的ip
elasticsearch.hosts: [ "http://ip:9200" ]
#重启kibana
docker restart kibana

三.部署logstash

1.官网下载对应版本的logstash
https://www.elastic.co/fr/downloads/logstash
2.解压即可

四.配置logstash,从mysql同步数据至es

1.在logstash的config目录下创建目录userAttachment,并创建对应的文件logstash-userAttachment.conf 、 userAttachmentLog.txt、 userAttachment.sql

2.需要同步的mysql表 

3..编写配置文件

(跟踪字段version_time,增量更新,使用filter对数据库中时间字段进行处理,否则会差八小时)

 

vim logstash-userAttachment.conf

# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.

input {
  jdbc {
       # 数据库连接
       jdbc_connection_string => "jdbc:mysql://ip:3306/analysisdb?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false"
       jdbc_user => "account"
       jdbc_password => "passwd"
       # 需要下载数据库连接驱动并放在logstash下
       jdbc_driver_library => "/data1/logstash-7.14.0/sync/mysql-connector-java-5.1.14/mysql-connector-java-5.1.14-bin.jar"
       jdbc_driver_class => "com.mysql.jdbc.Driver"

       # 处理中文乱码问题
       jdbc_default_timezone => "Asia/Shanghai"
       #使用本地时区为local,否则sql_last_value如果是timestamp,时间会提前8小时
       #值可以是任何的:utc,local,默认值为 "utc"
       plugin_timezone => "local"
       #codec => plain { charset => "UTF-8"}
       # 使用其它字段追踪,而不是用时间
       use_column_value => true
       # 追踪的字段
       tracking_column => "version_time"
       # 取值范围为:numeric,timestamp,默认值为numeric。
       tracking_column_type => timestamp
       # 记录追踪字段上次记录
       record_last_run => true
       # 上一个sql_last_value值的存放文件路径, 必须要在文件中指定字段的初始值
       last_run_metadata_path => "/data1/logstash-7.14.0/config/userAttachment/userAttachmentLog.txt"
       # 是否清除 last_run_metadata_path 的记录,true则每次都从头开始查询所有的数据库记录
       clean_run => false
       #是否开启分页
       jdbc_paging_enabled => "true"
       #分页条数
       jdbc_page_size => "50000"
       # 执行的sql 文件路径+名称 
       statement_filepath => "/data1/logstash-7.14.0/config/userAttachment/userAttachment.sql"
       schedule => "* * * * *"
       #是否将字段名转换为小写,默认true(如果有数据序列化、反序列化需求,建议改为false)
       lowercase_column_names => false
    }
}

filter {
        ruby {  #设置一个自定义字段'timestamp'[这个字段可自定义],将logstash自动生成的时间戳中的值加8小时,赋给这个字段
        code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*3600)"  }

        ruby { # create_time(创建时间)增加8小时 
        code => "event.set('create_time', event.get('create_time').time.localtime + 8*60*60)"}

        ruby { # update_time(更新时间)增加8小时 
        code => "event.set('update_time', event.get('update_time').time.localtime + 8*60*60)"}

        ruby { # expire_time(到期时间)增加8小时 
        code => "event.set('expire_time', event.get('expire_time').time.localtime + 8*60*60)"}

        ruby { # version_time(本版更新时间)增加8小时 
        code => "event.set('version_time', event.get('version_time').time.localtime + 8*60*60)" }

        ruby { # 将自定义时间字段中的值重新赋给@timestamp
        code => "event.set('@timestamp',event.get('timestamp'))" }

        ruby {  #将自定义时间字段中的值重新赋给create_time
        code => "event.set('create_time',event.get('create_time'))"}
        
        ruby {  #将自定义时间字段中的值重新赋给update_time
        code => "event.set('update_time',event.get('update_time'))"}

        ruby {  #将自定义时间字段中的值重新赋给expire_time
        code => "event.set('expire_time',event.get('expire_time'))"}

        ruby {  #将自定义时间字段中的值重新赋给version_time
        code => "event.set('version_time',event.get('version_time'))"}

    mutate {  #删除自定义字段
                remove_field => ["timestamp"]
        }
       # 转换成日期格式
      ruby {
        code => "event.set('create_time', event.get('create_time').time.localtime.strftime('%Y-%m-%d'))" }
      ruby {
        code => "event.set('update_time', event.get('update_time').time.localtime.strftime('%Y-%m-%d'))" }
       ruby {
        code => "event.set('expire_time', event.get('expire_time').time.localtime.strftime('%Y-%m-%d'))" }
       ruby {
        code => "event.set('version_time', event.get('version_time').time.localtime.strftime('%Y-%m-%d'))" }
 }



output {
  elasticsearch {
        # 需要同步的es的ip:port          
        hosts => "localhost:9200" 
        #同步至es中的索引名(需要在同步前,先在es中创建好)
        index => "user_attachment"
        # es的id生成策略。不写es自己分配,我这里使用和mysql一致的id
        document_id => "%{id}"
    }
  stdout {
        codec => json_lines
    }
}
                        

4.编写userAttachment.sql

vim userAttachment.sql

select *, concat_WS(",",id,user_account,file_name,file_code,file_type,file_remote_path,create_by,create_time,
update_by,update_time,
file_suffix,expire_time,del_flag,version_code,version_time,is_latest_version) 
as userAttachment from dc_hr_staff_attachment where version_time > :sql_last_value

5.运行logstash

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值