您的位置:首页 > 其它

ELK日志收集系统搭建(基于7.1.1)

2019-06-14 18:00 288 查看

ELK日志收集系统搭建(基于7.1.1)

下载ElasticSearch、Kibana、Logstash的安装包,官方下载页面https://www.elastic.co/cn/downloads/,当前使用版本7.1

安装java运行环境

创建用户

默认不支持root用户运行elk,所以要创建执行用户

adduser elkuser # 添加用户
passwd elkuser # 设置密码
su elkuser # 切换用户

ElasticSearch单机部署

配置和启动

我的安装包安装包位置在**/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

Kibana安装

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"

Logstash 配置

配置和启动

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配置

log4j2.xml内容如下(仅列举logstash相关配置)

<?xml version="1.0" encoding="UTF-8"?>
<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配置安全性

停止elasticsearch服务,并在config/elasticsearch.yml 添加下面两行

xpack.security.enable: true
xpack.security.transport.ssl.enabled: true

启动elasticsearch

./bin/elasticsearch

这时启动会有异常,与http请求无关,暂时忽略。

执行以下命令,根据提示为内置用户创建密码,密码需要记下,以后有用

./bin/elasticsearch-setup-passwords interactive

kibana配置安全性

停止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

修改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日志收集系统(单机版)搭建完成。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: