elk安装
一、为什么使用elk
一般大型系统是一个分布式部署的架构,不同的服务模块在不同的服务器上,出问题时,需要根据问题暴露的关键信息定位到具体的服务器和模块,构建一套集中式的日志系统,可以提高定位问题的效率
很多时候对于业务关键逻辑,通过file_put_content存储请求数据或者debug,数据量大的时候,对服务器和访问性能都具有不小的影响
一个完整的集中式日志系统包含的主要特点:
- 收集 - 能够采集多种来源的日志数据
- 传输 - 能够稳定的吧日志数据传输到中央系统
- 存储 - 如何存储日志数据
- 分析 - 可以支持UI分析
- 警告 - 能够提供错误报告、监控机制
二、elk介绍
elk是三个开源软件的缩写:Elasticsearch , Logstash, Kibana
- elasticsearch: 开源的日志搜索引擎,可搜集、分析、存储数据
- kibana:web面板,可以为logstash和els提供的日志分析展示在web界面,
- logstash:日志的搜索、分析、过滤日志的工具,支持大量的数据获取方式,工作方式是c/s架构,client端安装在需要收集日志的主机上,service端负责收集各个节点日志,并对日志进行过滤和修改等操作,并将其发往elasticsearch上
- FileBeat:轻量级的日志收集处理工具,使用具在各个服务器上搜集日志后传输给logstash
- filebeat数据beat,目前beat包含四种工具:
- Packetbeat(搜集网络流量数据)
- Topbeat (搜集系统、进程和文件系统级别低的CPU和内存使用情况等数据)
- filebeat (搜集文件数据)
- Winlogbeat (搜集windows事件日志数据)
一、安装elasticsearch
# 安装:
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.13.3-linux-x86_64.tar.gz
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.13.3-linux-x86_64.tar.gz.sha512
$ shasum -a 512 -c elasticsearch-7.13.3-linux-x86_64.tar.gz.sha512
$ tar -xzf elasticsearch-7.13.3-linux-x86_64.tar.gz
$ cd elasticsearch-7.13.3/
# 创建es用户 (不能使用root权限执行)
# 1、创建用户:elasticsearch
$ adduser elasticsearch
# 2、创建用户密码,需要输入两次
$ passwd elasticsearch
#3、将对应的文件夹权限赋给该用户
$ chown -R elasticsearch elasticsearch-7.17.3
#4、切换至elasticsearch用户
$ su elasticsearch
# config配置
$ less elasticsearch.yml |grep '#' -v
network.host: 192.168.3.14
http.port: 9200
discovery.seed_hosts: ["192.168.3.14"]
cluster.initial_master_nodes: ["node-1"]
bootstrap.memory_lock: false # 因运行时报错bootstrap checks failed,此处开启修复这个报错
bootstrap.system_call_filter: false # 因运行时报错bootstrap checks failed,此处开启修复这个报错
# xpack.security.transport.ssl.enabled: true # 开启安全验证,需要设置账号密码时可以开启
# xpack.security.enabled: true # 开启安全验证,需要设置账号密码时可以开启
# 配置内存大小 (根据服务器内存大小设置适当的值)
$ less ./elasticsearch-7.13.3/config/jvm.options |grep '#' -v
-Xms4g
-Xmx4g
...
# 运行
$ su elasticsearch
$ sh bin/elasticsearch
# 后台运行
$ su elasticsearch
$ nohup bin/elasticsearch &
# 访问请求是否正常启动 (出现下列信息,则正常启动)
$ curl http://192.168.3.14:9200/
{
"name" : "87DNZWU",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "e3A3l85MSZuZlRhxj6IB2w",
"version" : {
"number" : "6.7.0",
"build_flavor" : "default",
"build_type" : "zip",
"build_hash" : "8453f77",
"build_date" : "2019-03-21T15:32:29.844721Z",
"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"
}
二、安装kibana
# 安装
$ curl -O https://artifacts.elastic.co/downloads/kibana/kibana-7.13.3-linux-x86_64.tar.gz
$ curl https://artifacts.elastic.co/downloads/kibana/kibana-7.13.3-linux-x86_64.tar.gz.sha512 | shasum -a 512 -c -
$ tar -xzf kibana-7.13.3-linux-x86_64.tar.gz
$ mv kibana-7.13.3-linux-x86_64/ kibana-7.13.3/
# config配置 其中xpack 需要执行 (bin/kibana-encryption-keys generate)
$ less kibana.yml |grep '#' -v
server.port: 5602
server.host: "192.168.3.14"
elasticsearch.hosts: ["http://192.168.3.14:9200"]
i18n.locale: "zh-CN"
xpack.encryptedSavedObjects.encryptionKey: 58d5e678bf21278edeed84433f905663
xpack.reporting.encryptionKey: d0b608215432fc28ab1b17ed3906c95a
xpack.security.encryptionKey: 59819c05503d1364e3ec17c34839e6a1
monitoring.cluster_alerts.email_notifications.email_address: leiyuan@corp-ci.com
xpack.reporting.capture.browser.chromium.disableSandbox: true
# 运行
$ sh bin/kibana
# 后台运行
$ nohup bin/kibana &
# 查看是否正常启动
# 网页访问 http://192.168.3.53:5601/, 如果正常访问,则启动成功
kibana 启动报错ersion GLIBC_2.14 not found
https://blog.csdn.net/xinjing2015/article/details/93746179
三、安装JAVA
# 官方包内有自带的java环境,可以不用安装,如果想要自己配置的java环境,可以按照下放操作 (根据官方文档按照相应版本的java)
$ yum install java-1.8.0-openjdk.x86_64
$ java -version
openjdk version "1.8.0_275"
OpenJDK Runtime Environment (build 1.8.0_275-b01)
四、安装logstash
# 下载 mysql-connector-java (用于连接数据库)
$ wget http://search.maven.org/remotecontent?filepath=mysql/mysql-\
connector-java/5.1.32/mysql-connector-java-5.1.32.jar
# 官网下载安装包
$ wget https://artifacts.elastic.co/downloads/logstash/logstash-7.13.3-linux-x86_64.tar.gz
$ tar -xzf logstash-7.13.3-linux-x86_64.tar.gz logstash-7.13.3
# 查询是否可以正常使用 (方式一)
$ bin/logstash -e 'input { stdin {} } output { stdout {} }'
#(画外音:选项 -e 的意思是允许你从命令行指定配置)
# 启动后 输入hello world,可返回json数据,即启动成功
# 接受redis数据 (方法二)
$ less application.conf |grep -v '#'
input {
redis {
data_type => "list"
key => "logstash-list"
host => "192.168.3.53"
port => 8003
threads => 5
}
}
output {
elasticsearch {
hosts => ["http://192.168.3.53:9200"]
index => "application_log_%{+YYYY.MM.dd}"
}
}
# 接受filebeat数据 (暂时不写,自行查询) (方式三)
$ less logstash-sample.conf | grep -v '#'
input {
beats {
port => 5044
}
}
output {
stdout {codec => rubydebug } # 输出到页面
elasticsearch {
hosts => ["http://192.168.3.53:9200"] # 存储的elasticsearch
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
}
}
# 接受mysq 数据库数据 (具体写在Mysql>ElasticSearch.md文档中) (方式四)
# 启动单个配置
$ bin/logstash -f config/logstash-sample.conf --config.test_and_exit // 第一次校验配置是否正确
$ bin/logstash -e 'input { stdin { } } output { stdout {} }' // 普通输出
$ bin/logstash -f config/logstash-sample.conf --config.reload.automatic # 执行某个配置文件
# 同时启动多个配置文件 (需配置管道pipelines.yml)
1. 需配置管道pipelines.yml
$ less pipelines.yml |grep -v "#"
- pipeline.id: mysql
pipeline.workers: 1
pipeline.batch.size: 125
path.config: "/opt/ci123/elk/logstash-6.7.0/config/config.d/mysql.d/*.conf"
- pipeline.id: application
pipeline.workers: 1
pipeline.batch.size: 125
path.config: "/opt/ci123/elk/logstash-6.7.0/config/config.d/application.conf"
2. 校验
开启config/logstash.yml中的 config.test_and_exit: true
3. 启动
bin/logstash # (画外音:pipelines.yml启动不成功,或找不到pipelines.yml时,很有可能是语法错误,yml对语法邀请非常严格,需仔细检查)
bin/logstash --config.reload.automatic # 启动并自动加载修改的配置文件
五、安全设置
1. 为elk设置用户名和密码
注意:elastic 相当于超级管理员的账号,任何连接都可以使用此账号,但风险较高,建议为各自的模块设置自己的账号和权限
# step1 停止运行kibana和elasticsearch
# step2 在elasticsearch下增加配置 config/elasticsearch.yml
xpack.security.transport.ssl.enabled: true
xpack.security.enabled: true
# step3 启动elasticsearch
./bin/elasticsearch
# step4 设置密码 (可选择 自动设置,也可以手动设置)
# (画外音,设置的密码比较多,如果想设置不一样,需提前记录下)
./bin/elasticsearch-setup-passwords auto #
./bin/elasticsearch-setup-passwords interactive # 手动设置 (注意,此命令有且只能操作一次)
# 修改某个账号密码
$ curl -H "Content-Type:application/json" -XPOST -u {user} 'http://192.168.1.123:9227/_xpack/security/user/{user}/_password' -d '{ "password" : "new_password" }'
Enter host password for user 'elastic':
{}
tip:
elastic: 需要修改的账号名称
new_password:新密码
elastic
一个内置的超级用户,可用于连接elasticsearch、kibana
kibana_system
Kibana 用于连接 Elasticsearch 并与之通信的用户。
logstash_system
Logstash 在 Elasticsearch 中存储监控信息时使用的用户。
beats_system
Beats 在 Elasticsearch 中存储监控信息时使用的用户。
apm_system
APM 服务器在 Elasticsearch 中存储监控信息时使用的用户。
remote_monitoring_user
在 Elasticsearch 中收集和存储监控信息时使用的用户 Metricbeat。它具有remote_monitoring_agent
和 remote_monitoring_collector
内置角色。
2. 访问elasticsearch
# 测试访问
es@ts_web_123 elasticsearch-7.13.3]$ curl http://192.168.1.123:9227 -u elastic
Enter host password for user 'elastic': xxx
{
"name" : "node-1",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "faDVR0zoS5CGGhDcm6TkIg",
"version" : {
"number" : "7.13.3",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "5d21bea28db1e89ecc1f66311ebdec9dc3aa7d64",
"build_date" : "2021-07-02T12:06:10.804015202Z",
"build_snapshot" : false,
"lucene_version" : "8.8.2",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
3. kibana项目
#kibana: config/kibana
elasticsearch.username: "kibana_system"
elasticsearch.password: "你的密码"
(画外音:kibana密码需要与elastic密码一致,否则启动异常 待解决)
4. logstash 管道连接
为logstash配置的账号
- 使用Kibana 中的Management > Roles UI 或roleAPI 创建 logstash_writer角色。对于集群权限,添加manage_index_templates和monitor。对于指数的权限,添加write,create和create_index。
- 创建
logstash_internal
用户并为其分配logstash_writer
角色。可以从Kibana 中的Management > Users UI中创建用户
output {
elasticsearch {
hosts => ["http://192.168.1.14:9200"]
index => "application_log_%{+YYYY.MM.dd}"
user => "logstash_internal"
password => "xxx"
}
}
5. kibana 后台 可设置各类用户角色
可通过内置角色,设置不同的账户
六、遇到的常见报错
1.【elasticsearch启动】sh bin/elasticsearch
报错:can not run elasticsearch as root
# 创建es用户 (不能使用root权限执行)
# 1、创建用户:elasticsearch
$ adduser elasticsearch
# 2、创建用户密码,需要输入两次
$ passwd elasticsearch
#3、将对应的文件夹权限赋给该用户
$ chown -R elasticsearch elasticsearch-7.17.3
#4、切换至elasticsearch用户
$ su elasticsearch
2.【elasticsearch启动】bootstrap checks failed :
问题原因:因为Centos6不支持SecComp,而ES5.2.1默认bootstrap.system_call_filter为true进行检测,所以导致检测失败,失败后直接导致ES不能启动。详见 :https://github.com/elastic/elasticsearch/issues/22899
解决方法:
在elasticsearch.yml中配置bootstrap.system_call_filter为false,注意要在Memory下面:
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
3.【elasticsearch启动】 max number of threads [1024] for user [elasticsearch] is too low, increase to at least [4096]
修改max user processes
错误说明: Linux系统为每个用户都设置了一个最大进程数, 这个特性可以让我们控制服务器上现有用户可以创建的进程数量.
(2) 查看max user processes
:
# 与查看max open files类似, 可使用 ulimit -u查看max user processes:
ulimit -u
(3) 修改max user processes
:
① 方案一: 修改/etc/security/limits.conf
文件, 在文件最后添加下述内容:
* soft nproc 131072
* hard nproc 131072
② 方案二: 修改/etc/security/limits.d/90-nproc.conf
文件, 在文件最后添加下述内容:
# 用户进程数的默认限制, 下面这个是对root外的其他用户限制max user processes, 要注释掉:
# * soft nproc 1024
root soft nproc 131072
4.【elasticsearch启动】max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]**
修改虚拟内存大小
[root@localhost ~]# sysctl -w vm.max_map_count=262144
查看修改结果
[root@localhost ~]# sysctl -a|grep vm.max_map_countvm.max_map_count = 262144
5.【kibana启动】Index .kibana_7.13.2_001 belongs to a version of Kibana that cannot be automatically migrated. Reset it or use the X-Pack upgrade assistant.
原因:
遗留了旧版的es后,kibana还存放着原es数据索引。
解决方法:
修改kibana.yml里的,index.kibana 为index.kibana6.7
重启kibana
6. logstash报错:
本地出现报错,无法连接elasticsearch:9200时,关闭本地翻墙软件代理,再尝试。