下载ElasticSearch、Kibana、Logstash的安装包,官方下载页面https://www.elastic.co/cn/downloads/,当前使用版本7.1
默认不支持root用户运行elk,所以要创建执行用户
adduser elkuser # 添加用户
passwd elkuser # 设置密码
su elkuser # 切换用户
我的安装包安装包位置在**/opt/env**目录下
使用elkuser进行操作
cd /opt/env
tar -zxvf elasticsearch-7.1.1-linux-x86_64.tar.gz
mv elasticsearch-7.1.1 elasticsearch
cd elasticsearch
## 修改配置文件
vim config/elasticsearch.yml
# 将network.host: 0.0.0.0 修改为 network.host: 0.0.0.0,保证外部可以通过http来访问elasticsearch
# 默认端口为9200,可以不修改,如果修改,后面kibana和logstash需要配置实际的端口
./bin/elasticsearch # 启动
这样启动会遇到一下三个问题导致启动失败
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
[3]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
解决方案如下
[1] elasticsearch用户拥有的可创建文件描述的权限太低,至少需要65535;
增加elkuser权限
su root
vim /etc/security/limits.conf
# 添加下面两行(去掉注释)
# elkuser hard nofile 65535
# elkuser soft nofile 65535
## 修改完成后需要重新登录elkuser才能生效
[2] 虚拟内存太小
su root
vi /etc/sysctl.conf
# 增加一行 vm.max_map_count=262144
sysctl -p
[3] 更改绑定的ip之后被认为是生产环境配置,必须要配置集群和节点
su elkuser
vim config/elasticsearch.yml
# 修改以下两行的值(去掉注释)
# node.name: node-1
# cluster.initial_master_nodes: ["node-1"]
至此问题解决,可以启动
./bin/elasticsearch
tar -zxvf kibana-7.1.1-linux-x86_64.tar.gz
mv kibana-7.1.1-linux-x86_64 kibana
cd kibana
vim config/kibana.yml
# 增加以下几行(不带注释)
## 修改绑定ip,使外部可以通过http访问
# server.host: "0.0.0.0"
## 监听端口,可以不修改
# server.port: 5601
## 修改elasticsearch服务的地址
# elasticsearch.hosts: ["http://localhost:9200"]
## 修改页面语言为中文
# i18n.locale: "zh-CN"
su elkuser
tar -zxvf logstash-7.1.1.tar.gz
mv logstash-7.1.1 logstash
cd logstash
以log4j2日志为例
创建配置文件config/logstash-10001.conf并写入以下内容
input {
tcp {
# 监听10001端口
port => 10001
codec => json
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
# 在es中的索引,每天生成新索引
index => "testlog-%{+YYYY.MM.dd}"
}
}
使用该配置文件启动
./bin/logstash -f config/logstash-10001.conf
log4j2.xml内容如下(仅列举logstash相关配置)
<Configuration status="WARN" monitorInterval="30">
<Properties>
Properties>
<Appenders>
<Socket name="Socket" host="hostAddress" port="10001">
<JsonLayout compact="true" eventEol="true" />
Socket>
Appenders>
<Loggers>
<Logger name="org.hibernate.validator.internal.util.Version"
level="warn" />
<Logger name="org.apache.coyote.http11.Http11NioProtocol"
level="warn" />
<Logger name="org.apache.tomcat.util.net.NioSelectorPool"
level="warn" />
<Root level="info">
<AppenderRef ref="Socket"/>
Root>
Loggers>
Configuration>
启动java程序,至此,可以将log4j2的日志输出到elk系统中
使用浏览器访问kibana,可以在左侧导航中选择管理>Kibana-索引模式>创建索引模式,按照提示创建索引模式(例如索引模式名称为testlog-*)。然后在左侧导航选择Discover,再选择刚穿件的索引模式与查看的时间段,即可查看对应的日志。
KQL搜索功能请自行学习使用。
6.8与7.1.0版本之后,elastic内置了X-pack插件,免费版本中也可以开启一些用户权限配置。
我这里使用的7.1.1版本,不保证其他版本适用。
停止elasticsearch服务,并在config/elasticsearch.yml 添加下面两行
xpack.security.enable: true
xpack.security.transport.ssl.enabled: true
启动elasticsearch
./bin/elasticsearch
这时启动会有异常,与http请求无关,暂时忽略。
执行以下命令,根据提示为内置用户创建密码,密码需要记下,以后有用
./bin/elasticsearch-setup-passwords interactive
停止kibana服务,在config/kibana.yml中加入以下几行
# 内置kibana用户名
elasticsearch.username: "kibana"
# 之前为kibana用户创建的密码
elasticsearch.password: "kibanapasswd"
# 长度不少于32位的加密密钥,暂时不清楚其用途,官方文档这样要求的
xpack.security.encryptionKey: "12345678901234567890123456789012"
# 浏览器访问kibana的session超时时间,单位毫秒
xpack.security.sessionTimeout: 600000
启动kibana
./bin/kibana
使用浏览器访问kibana,使用超级用户elastic及之前为elastic配置的密码登陆kibana。
点击左侧导航的管理可以看到,主面板上比之前多了安全性菜单,可以管理用户与角色。
这里需要为logstash配置一个用户,否则j就无法使用之前的logstash-10001.conf文件将日志输出到ElasticSearch中。
先创建一个可以操作指定索引的角色,例如角色名为logstashRole。我这里为其配置的权限如下:
Elasticsearch -集群权限:all
Elasticsearch -索引权限:选择之前创建的索引模式testlog-*,权限选择all.如果需要授权多个索引模式可以自行添加。
创建用户,例如用户名和密码都为logstashuser,为其分配角色为logstashRole。
修改logstash-10001.conf如下:
input {
tcp {
port => 10001
codec => json
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "testlog-%{+YYYY.MM.dd}"
user => "logstashuser"
password => "logstashuser"
}
}
启动logstash
./bin/logstash -f config/logstash-10001.conf
启动java程序,在kibana中可以看到最新的日志。至此,ELK日志收集系统(单机版)搭建完成。