elasticSearch-7.5.1
1.下载tar.gz 源码包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.5.1-linux-x86_64.tar.gz
2. 不能使用root 用户启动
由于es无法使用root用户启动(官方建议:由于elasticsearch可以接收用户输入的脚本并且执行,为了系统安全考虑, 建议创建一个单独的用户用来运行elasticsearch),因此我们需要创建一个用户组,并在该用户组下创建用户,便于管理。
# 创建用户组。注意:此处的用户组名称自定义即可
groupadd elsearch
# 创建用户。注意:此处的用户名和密码自定义即可
useradd elsearch -g elsearch -p yourPassword
# 为用户分配文件夹操作权限。注意:此处需输入你创建的用户组和用户名称,文件夹需指定为elasticsearch的所在文件夹。
chown -R elsearch:elsearch ./elk/
3.登录elsearch用户,解压es压缩包,修改配置文件保存后启动。
tar -zxvf elasticsearch-7.5.1-linux-x86_64.tar.gz
mv elasticsearch-7.5.1 elasticsearch
cd elasticsearch/config
vim elasticsearch.yml
elasticsearch.yml配置文件修改项如下:
## elasticsearch.yml中添加如下配置,支持跨域访问
http.cors.enabled: true
http.cors.allow-origin: "*"
network.host: 0.0.0.0 # 监听全部ip,注意:在实际环境中应设置为一个安全的ip
http.port: 9200 # es服务的端口号
xpack.security.enabled: true # 开启认证,注意:若无需开启则可不设置该配置
discovery.type: single-node # 单节点配置,注意:该配置需根据实际需求进行配置。
action.auto_create_index: true
index.mapper.dynamic: true
jvm.options配置文件修改项如下:
调整elasticsearch jvm.options的堆内存大小。注意:如果内存足够可以调整为当前服务器内存的一半大小,但是不要超过32g,因为官方不推荐。jvm超过32g后指针压缩效果失效。本文服务器内存大小为16g,因此配置为8g。
vim jvm.options
-Xms8g
-Xmx8g
修改完成后保存配置并启动es,直接启动和后台启动的命令如下:
# 直接启动
./elasticsearch/bin/elasticsearch
# 后台启动
./elasticsearch/bin/elasticsearch -d
# 停止
ps -ef | grep elasticsearch | grep -v grep | awk '{print $2}'
kill -9 进程号
4.设置内置用户密码(若未开启认证配置则忽略此步骤):
# 为es内置用户设置初始密码,默认密码为changeMe,密码全部设置为了elastic
./elasticsearch/bin/elasticsearch-setup-passwords interactive
解决:使用ll命令查看config下文件的属主信息,发现elasticsearch.keystore文件是属于root用户的 将该文件为当前用户赋予权限就可以了
5.检查单实例集群运行情况(若开启ES认证,则建议使用postMan调用es内置接口,这样权限比较好添加。)shell调用接口例子如下:
# 检查单实例集群运行情况
curl -X GET "localhost:9200/_cat/health?v" # localhost需替换为实际的es地址
# 获取集群节点情况
curl -X GET "localhost:9200/_cat/nodes?v" # localhost需替换为实际的es地址
# 列出所有指数
curl -X GET "localhost:9200/_cat/indices?v" # localhost需替换为实际的es地址
# 新增一个文档
curl -X PUT "localhost:9200/customer/_doc/1?pretty" -H # localhost需替换为实际的es地址
'Content-Type: application/json' -d'
{
"name": "John Doe"
}
'
# 删除一个文档
curl -X DELETE "localhost:9200/customer?pretty" # localhost需替换为实际的es地址
# 列出所有索引
curl -X GET "localhost:9200/_cat/indices?v" # localhost需替换为实际的es地址
# 获取某个文档。在查询参数中加上pretty 会调用pretty-print功能,将json格式化打印
curl -X GET "localhost:9200/customer/_doc/1?pretty" # localhost需替换为实际的es地址
# 删除索引
curl -X DELETE "localhost:9200/_all" # localhost需替换为实际的es地址
curl -X DELETE "localhost:9200/dev_*" # localhost需替换为实际的es地址
elasticsearch-head
docker 安装
github地址: elasticsearch-head
1.下载镜像
docker pull mobz/elasticsearch-head:5
2.启动服务
docker run -d --name elasticsearch-head -p 9100:9100 docker.io/mobz/elasticsearch-head:5
3.访问首页,连接es访问,若连接不上,需要在es的配置文件中添加允许跨域访问,并重启elasticsearch。
# elasticsearch.yml中添加如下配置,支持跨域访问
http.cors.enabled: true
http.cors.allow-origin: "*"
--注意--:若es添加了权限校验的配置,则访问es-header时需要添加授权用户。否则&符号后面的参数均不需添加,例子如下:
注意:此处的localhost需替换为实际的elasticsearch-head地址
http://localhost:9100/?base_uri=http://localhost:9200&auth_user=elastic&auth_password=changeMe
logstash
1.下载tar.gz 源码包
https://artifacts.elastic.co/downloads/logstash/logstash-7.5.1.tar.gz
2.解压,调整配置文件,参数修改完成后保存即可
tar -zxvf logstash-7.5.1.tar.gz
mv logstash-7.5.1 logstash
cd logstash/config
cp logstash-sample.conf syslog.conf
vim syslog.conf
示例配置如下:
input {
beats {
# 端口信息
port => 5044
}
}
# 对filebeat中传输过来的信息进行过滤
filter {
mutate {
rename => { "[host][name]" => "host" }
}
# 排除tag中无用的参数,避免生成的ES索引格式有问题。注意:若不操作filebeat的tag时则无需该if条件及里面的mutate配置
if "beats_input_codec_plain_applied" in [tags] {
mutate {
remove_tag => ["beats_input_codec_plain_applied"]
}
}
# 标准配置,若无特殊需求可不做修改
grok {
match => { "message" => [
"\[%{TIMESTAMP_ISO8601:logtime}\]\s*\[%{LOGLEVEL:loglevel}\]\s*\[%{IPORHOST:instancehost}\]\s*\[%{DATA:module}\]\s*%{JAVACLASS:class}\s*\[pic:%{DATA:pic}\]\s*\[%{DATA:keys}\]\s*%{GREEDYDATA:content}",
"\[%{TIMESTAMP_ISO8601:logtime}\]\s*\[%{LOGLEVEL:loglevel}\]\s*\[%{IPORHOST:instancehost}\]\s*\[%{DATA:module}\]\s*%{JAVACLASS:class}\s*\[pic:%{DATA:pic}\]\s*%{GREEDYDATA:content}",
"\[%{TIMESTAMP_ISO8601:logtime}\]\s*%{GREEDYDATA:content}",
"%{GREEDYDATA:content}"
]}
}
# 标准配置,若无特殊需求可不做修改
date {
match => [ "logtime", "ISO8601", "yyyy-MM-dd'T'HH:mm:ss.SSS", "yyyy-MM-dd'T'HH:mm:ss,SSS", "yyyy-MM-dd HH:mm:ss.SSS", "yyyy-MM-dd HH:mm:ss,SSS" ]
target => "@timestamp"
timezone => "Asia/Shanghai"
}
}
# 配置输出到ES中的索引格式
output {
elasticsearch {
# elasticsearch的hosts地址。注意:需将localhost修改为实际的地址
hosts => ["http://localhost:9200"]
# 以filebeat定义的tags为前缀,日期为后缀组成索引,例如:(integration_dev-hzero-platform-2019.11.02)。注意:该配置需修改为实际想要的索引格式。
index => "%{[tags]}-%{+YYYY.MM.dd}"
# elastic用户名
user => "elastic"
# 注意:此处的密码需修改为实际elastic用户的密码,未修改时默认为changeMe,建议统一进行修改
password => "changeMe"
}
}
注意:上述配置中需要重点关注filter部分以及output部分的配置内容,在配置时需根据实际需求来修改相应的配置项,需修改的地方文中均有注释进行标注。
3.启动logstash
# 直接启动
./logstash -f ../config/syslog.conf
# 后台启动
nohup ./bin/logstash -f ./config/syslog.conf &
# 停止
ps -ef | grep logstash | grep -v grep | awk '{print $2}'
kill -9 进程号
kibana-7.5.1
1.下载tar.gz源码包
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.5.1-linux-x86_64.tar.gz
2.解压,调整配置文件,参数修改完成后保存即可
tar -zxvf kibana-7.5.1-linux-x86_64.tar.gz
mv kibana-7.5.1-linux-x86_64 kibana
cd kibana/config
vim kibana.yml
示例配置如下:
server.port: 5601 # Kibana端口号
server.host: "localhost" # kibana地址。注意:该配置需修改为实际kibana的host地址。
elasticsearch.hosts: ["http://localhost:9200"] # kibana连接es的host。注意:该配置需修改为实际es的host地址。
elasticsearch.username: "elastic" # es用户名,当es开启认证授权时需要配置。
elasticsearch.password: "changeMe" # es密码,当es开启认证授权时需要配置,该配置需修改为实际elastic账户的密码。
i18n.locale: "zh-CN" # 配置中文Kibana环境。注意:该配置按需进行配置,不加时默认为英文操作环境。
3.启动Kibana
# 直接启动
./bin/kibana
# 后台启动
nohup ./bin/kibana &
查看日志
tail -f /home/elsearch/nohup.out
# 停止
netstat -tunlp|grep 5601
kill -9 进程号
[图片上传失败...(image-5e5671-1597722404795)]
elasticsearch-analysis-ik
安装 elasticsearch-analysis-ik
mkdir elasticsearch-analysis-ik
cd elasticsearch-analysis-ik
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.5.1/elasticsearch-analysis-ik-7.5.1.zip
unzip elasticsearch-analysis-ik-7.5.1.zip
mv elasticsearch-analysis-ik/ /u01/elk7.5.1/elasticsearch/plugins/
cd /u01/elk7.5.1/elasticsearch/plugins/
至此我们的elk环境已经初步搭建完成,下面就需要将搜集到的日志信息与elk日志监控平台进行对接。
-搭建问题记录
问题:
1.单机部署elk时,集群健康值总是为red,排查原因是因为存在副本分片数导致不稳定。
解决方式是在elasticsearch-header中或postman中执行复合查询。
请求路径如下:
http://localhost:9200/_template/template_http_request_record,(注意:请求中的localhost需替换为实际的es地址)
传参如下:
{"index_patterns":["*"],"settings":{"number_of_shards":1,"number_of_replicas":0}}
执行返回{"acknowledged": true}说明修改成功,此时在启动logstash和filebeat传输数据,es创建的索引主分片是1,副本分片是0
注意:elasticsearch的主分片和副本分片不可以存在于同一节点上。否则会出问题
2.部署elk后索引状态为UNASSIGNED(UNASSIGNED原因:Too many open files)
此时需要在es用户下执行ulimit -a 查看当前用户的open file数量,默认1024,然后在root用户下执行
vim /etc/security/limits.conf文件,在文件中添加配置:
elsearch soft nofile 65535
elsearch hard nofile 65535
迁移elasticSearch目录
1.修改/etc/elasticsearch/elasticsearch.yml文件,
修改数据文件存储位置:
默认位置: path.data: /path/to/data
修改为: path.data: /data/elasticsearch/data
修改日志文件存储位置:
默认位置: path.logs: /path/to/logs
修改为: path.logs: /data/elasticsearch/logs
2. 新建目录
chown -R elsearch:elsearch elasticsearch
cd /u01/elk7.5.1/elasticsearch/data
mv * /data/elasticsearch/data/
cd /u01/elk7.5.1/elasticsearch/logs
mv * /data/elasticsearch/logs/
问题解决
1. 权限问题
Java HotSpot(TM) 64-Bit Server VM warning: Cannot open file logs/gc.log due to Permission denied
解决方法:
因为第一次启动不小心用了root启动,导致用root生成了对应的文件。切换es账号之后,没有对应文件的权限导致,删除相关的东西即可。
2. max number of threads [1024]
ERROR: [2] bootstrap checks failed
[1]: max number of threads [1024] for user [es] is too low, increase to at least [4096]
[2]: system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
解决:
ulimit -a
max user processes (-u) 1024
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
vi /etc/security/limits.d/90-nproc.conf
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.
* hard nproc 4096
* soft nproc 4096
* soft nproc 4096
root soft nproc unlimited
3. system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
原因:
这是在因为Centos6不支持SecComp,而ES5.2.0默认bootstrap.system_call_filter为true进行检测,所以导致检测失败,失败后直接导致ES不能启动。
解决:
在elasticsearch.yml中配置bootstrap.system_call_filter为false,注意要在Memory下面:
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
4.Elasticsearch报错:
启动报错:[WARN ][r.suppressed ] [node-1] path: /.kibana_task_manager/_search, params: {ignore_unavailable=true, index=.kibana_task_manager} org.elasticsearch.action.search.SearchPhaseExecutionException: all shards failed;
这个错是索引分片的问题,一般如果没有用过此索引直接删除此索引即可。
curl -XDELETE http://localhost:9200/.kibana_task_manager
启动报错:No shard available for [get [.kibana][_doc][space:default]: routing [null]]
这个错是因为安装的时候Elasticsearch是单节点,但是分片默认有一个副分区,所以报此警告
Elasticsearch状态一直为yellow
这个也是因为Elasticsearch单节点导致,具体原因请参考如下文章
参考:
https://blog.csdn.net/gamer_gyt/article/details/53230165
https://blog.csdn.net/quicknet/article/details/43915417
https://blog.csdn.net/weixin_34399060/article/details/92382701