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
启动失败,配置没有问题,可能是配置文件格式中格式或者空格导致的