ELK日志收集系统搭建(基于7.1.1)
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日志收集系统(单机版)搭建完成。
- ELK日志系统单体搭建,基于7.1.1版本
- 基于flume与solr搭建的日志收集系统
- 基于ELK的日志收集系统的心得
- elk系统搭建并收集nginx日志-主要步骤
- 从0开始ELK日志收集系统介绍和搭建 JDK-1.6.0版
- ELK搭建简单的日志收集分析系统
- 基于Centos 6.5+MariaDB+loganalyzer+syslog搭建远程系统日志收集和分析环境
- 用ELK搭建简单的日志收集分析系统
- 基于flume+kafka+storm日志收集系统搭建
- 基于ELK搭建分布式日志管理平台----系统环境情况
- 用ELK搭建简单的日志收集分析系统【转】
- ELK学习2_用Kibana和logstash快速搭建实时日志查询、收集与分析系统
- ELK(一)ELK日志收集分析系统环境搭建
- ELK学习2_用Kibana和logstash快速搭建实时日志查询、收集与分析系统
- ELK日志收集系统搭建
- Linux搭建ELK日志收集系统:FIlebeat+Redis+Logstash+Elasticse
- 用Kibana和logstash快速搭建实时日志查询、收集与分析系统
- Docker构建ELK Docker集群日志收集系统_docker
- ELK1-日志收集分析系统环境搭建
- 基于Flume的美团日志收集系统(二)改进和优化