ELK环境部署
部署的版本需要统一,否则可能会有兼容性问题,使用6.8.0.
外网访问需要放行5601
9200
9300
三个端口
ElasticSearch
与Logstash
不建议部署同台服务器
- 默认中间件都安装在
/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;
- 上传安装包
elasticsearch-6.8.0.tar.gz
至/usr/local/elk
下,解压tar -zxvf elasticsearch-6.8.0.tar.gz
- 进入解压完的目录
elasticsearch-6.8.0
,启动ES。
sh bin/elasticsearch -d
- 查看启动日志有无报错信息
tail -300f logs/elasticsearch.log
- 上述步骤没有问题,验证环境是否正常。
服务器验证:
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步中若服务器正常,浏览器访问不了,在确认服务器防火墙对9200
、9300
的不限制的情况下,需要配置服务的host
# 配置 network.host: 0.0.0.0
vi config/elasticsearch.yml
- 安装ik分词插件
可以在线/离线安装,这里使用离线安装
- 离线安装
在线安装的 6.8.0使用过程中有问题,版本有bug,使用离线6.6.1版本可以正常使用
- 在
ES
安装目录下的plugins
新建ik
文件夹,把elasticsearch-analysis-ik-6.6.1.zip
上传至文件夹中 - 解压上面的文件
unzip elasticsearch-analysis-ik-6.6.1.zip
,需要修改版本对应信息,修改plugin-descriptor.properties
version=6.8.0 elasticsearch.version=6.8.0
- 重启
ES
在线安装(暂时不使用在线方式安装6.x版本)
- 进入
ES
安装的目录下,执行下面的语句
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.8.0/elasticsearch-analysis-ik-6.8.0.zip
- 重启
ES
sh bin/elasticsearch -d
- 验证
- 创建索引
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,但配置文件需要开启,集群部署需要
-
查杀
elasticsearch 进程
jps
找到对应任务的pid
kill -9 ${pid}
-
在根目录找到
config
文件夹,进入该文件夹,编辑配置文件vim elasticsearch.yml
在末尾添加
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true -
重新启动
elasticsearch
sh bin/elasticsearch -d
-
为默认账号手动设置密码(出现y/n,选y就行),以后登录需要使用
sh bin/elasticsearch-setup-passwords interactive
2. Kibana
-
解压
上传安装包
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
) -
编辑配置文件,添加
elasticsearch
用户登录名、密码进入解压文件夹目录,vim config/kibana.yml
elasticsearch.username: "kibana" # 安装ES时设置的对应的账号密码 elasticsearch.password: "your_password"
-
启动
nohup sh bin/kibana &
-
验证
- 打开浏览器,访问
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
- 安装
- 上传安装包
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
) - 上传
logstash-task-config-test.zip
压缩文件至/usr/local/elk/logstash-6.8.0
,解压文件unzip logstash-task-config-test.zip
- 解压完后会多次三个文件夹
driver
、template
、task
,需要修改task
目录下所有子目录里的config.cfg
- 进入解压完的目录
logstash-6.8.0
,配置模板(主要设置分词器)- 创建模板文件夹
mkdir template
- 创建模板配置
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" } } } } } } }
- 创建模板文件夹
- 在安装目录下创建任务执行的文件夹,用于存放向ES 写数据的任务
- 创建
task
文件夹,mkdir task
- 按不同的搜索种类创建二级子目录,这里以创建
小应用搜索
搜索为例
mkdir task/searchTest
- 进入
task/searchTest
文件夹下面,需要创建date.dat
、config.cfg
、excute.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
-
- 创建
- 编辑
config/pipelines.yml
流水线配置,有多个任务可以配置多个流水线任务,id
是唯一就行
#搜索任务流水配置
- pipeline.id: serachTest
path.config: "/usr/local/elk/logstash-6.8.0/task/searchTest/config.cfg"
- 启动
sh bin/logstash
启动失败,配置没有问题,可能是配置文件格式中格式或者空格导致的