这是一篇搭建 ELK 集群的文章,主要涉及3大组件 elasticsearch、logstash 和 kibana 以及一个日志收集代理 filebeat的安装,通过部署 ELK 建立对其感性的认识。
ELK 是Elasticsearch、Logstash、Kibana 的简写,用于将不同来源的日志集中整合的一起,建立集中式日志管理集群。
一个完整的集中式日志系统,需要有一下过程:
Elasticsearch 是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,使用 Java 语言编写。目前,最新的版本是 7.1.1。
主要特点
Logstash 是一个具有实时渠道能力的数据收集引擎。使用 JRuby 语言编写。其作者是世界著名的运维工程师乔丹西塞 (JordanSissel)。目前最新的版本是 7.1.1。
主要特点
它由三个主要部分组成
Kibana 是一款基于 Apache 开源协议,使用 JavaScript 语言编写,为 Elasticsearch 提供分析和可视化的 Web 平台。它可以在 Elasticsearch 的索引中查找,交互数据,并生成各种维度的表图。目前最新的版本是 7.1.1,并且原生支持中文界面。
Filebeat提供一种轻型的方法用于转发和汇总日志与文件, filebeat替代 logstash-forwarder 接收日志,目前的最新版本是 7.1.1。
实验环境如下:
IP 地址 | OS | 功能 |
---|---|---|
10.0.12.235 | CentOS 7 | filebeat |
10.0.12.235 | CentOS 7 | logstash |
10.0.12.231 | CentOS 7 | elasticsearch |
10.0.12.243 | CentOS 7 | kibana |
elasticsearch 由 java 编写,需要系统中支持 java。
yum install java -y
获取 elasticsearch 软件包,下载至/usr/local/src 目录。
wget -P /usr/local/src https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.1.1-linux-x86_64.tar.gz
创建elasticsearch 的 data 目录和log目录,用于保存 elasticsearch的数据和日志。
mkdir -p /data/elasticsearch/{data,log}
创建 elasticsearch 用户,因为 elasticsearch 可以接收用户输入的脚本并执行,所以出于系统安全考虑,elasticsearch 默认禁止 root 用户运行 elasticsearch,需要创建 elasticsearch 用户。
useradd -d /usr/local/elasticsearch -M elasticsearch
解压elasticsearch软件包至指定目录/usr/local。
tar xf /usr/local/src/elasticsearch-7.1.1-linux-x86_64.tar.gz -C /usr/local/
ln -s /usr/local/elasticsearch-7.1.1/ /usr/local/elasticsearch
修改相关目录的属主
chown -R elasticsearch /usr/local/elasticsearch
chown -R elasticsearch /usr/local/elasticsearch-7.1.1/
chown -R elasticsearch /data/elasticsearch/
配置文件:
cluster.name: my-application #集群名称
node.name: node-1 #当前节点的名称
path.data: /data/elasticsearch/data #数据存放目录
path.logs: /data/elasticsearch/log #日志存放目录
network.host: 0.0.0.0 #监听的地址
http.port: 9200 #监听端口
cluster.initial_master_nodes: ["node-1"]
elasticsearch 默认会在前台运行,使用-d
选项可以使其后台运行。
sudo -u elasticsearch /usr/local/elasticsearch/bin/elasticsearch [-d]
- 安装 elasticsearch head 插件,提示下载phantomjs-2.1.1失败或解压失败
下载失败:手动下载 phantomjs-2.1.1.tar.bz2文件至/tmp/phantomjs 目录
解压失败:使用 yum 安装 bzip2
- 运行 elasticsearch 报错汇总
错误1:max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
max number of threads [3795] for user [elasticsearch] is too low, increase to at least [4096]
vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
错误2:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
# vim /etc/sysctl.conf
vm.max_map_count = 262144
# sysctl -p
切换到 elasticsearch 用户后,显示为“-bash-4.2$”
使用 root 用户
cp /etc/skel/.bash* /usr/local/elasticsearch/
编译安装
yum install nodejs -y
cd /usr/local/src
git clone https://github.com/mobz/elasticsearch-head.git
cd /usr/local/src/elasticsearch-head
#在 head 插件目录中执行
npm instal
修改 elasticsearch.yml文件,添加如下内容,解决跨域访问问题:
http.cors.enabled: true
http.cors.allow-origin: "*"
运行 elasticsearch head 插件,监听在9100,提供图形化界面。
#在 elasticsearch head 目录中运行
npm run start
使用 chrome 扩展
使用谷歌浏览器安装 elasgticsearch-head 插件
下载并安装 filebeat
wget -P /usr/local/src https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.1.1-linux-x86_64.tar.gz
tar xf /usr/local/src/filebeat-7.1.1-linux-x86_64.tar.gz -C /usr/local/
ln -s /usr/local/filebeat-7.1.1-linux-x86_64/ /usr/local/filebeat
cp /usr/local/filebeat/filebeat.yml /usr/local/filebeat/filebeat.yml.default #备份原始配置文件
修改 filebeat 配置文件
filebeat.inputs: #输入至 filebeat
- type: log
enabled: true
paths:
- /var/log/filebeat/*.log #自己指定一个日志文件
output.logstash: #filebeat 输出至 logstash
hosts: ["LOGSTASH_IP:5044"]
如何让 filebeat 从头读取日志文件 已经运行的 filebeat程序会通过filebeat 程序目录中的
/usr/local/filebeat/data/registry
记录已经读取的日志文件和位置,对于初期调试,首先停止 filebeat 程序,然后删除此目录,再次运行 filebeat 程序,就可以从头读取指定的日志。
启动 filebeat
/usr/local/filebeat/filebeat
下载并解压至相关目录
wget -P /usr/local/src https://artifacts.elastic.co/downloads/logstash/logstash-7.1.1.tar.gz
tar xf /usr/local/src/logstash-7.1.1.tar.gz -C /usr/local/
ln -s /usr/local/logstash-7.1.1/ /usr/local/logstash
创建插件和数据目录mkdir /usr/local/logstash/plugin-data
调整 logstash.yml 配置文件
#vim /usr/local/logstash/config/logstash.yml
node.name: logstash
path.data: /usr/local/logstash/plugin-data
config.reload.automatic: true #自动更新配置
config.reload.interval: 10
http.host: "10.0.12.235" #本机 IP 地址
启动 logstash 需要一个配置文件,用来指定日志的输入、过滤和输出。
# vim /usr/local/logstash/conf/nginx-access.conf
input{
beats {
port => "5044"
}
}
filter {
grok {
patterns_dir => ["/usr/local/logstash/pattern"]
match => {
"message" => ["%{NGINXACCESS}"]
}
}
geoip {
source => "client_ip"
}
date {
match => ["Time","dd/MMM/yyyy:HH:mm:ss Z","ISO8601"]
locale => "cn"
target => "@timestamp"
}
}
output {
elasticsearch {
hosts => [ "http://10.0.12.236:9200" ]
index => "logstash-%{type}-%{+YYYY.MM.dd}"
template_overwrite => true
}
}
因为过滤的正则表达是太长,所以在单独目录种定义
mkdir /usr/local/logstash/pattern
vim /usr/local/logstash/pattern/nginx
NGINXACCESS %{IPV4:client_ip}\:%{BASE10NUM:client_port}\|%{IPV4:X_Forward}\s*%{HTTPDATE:Time}\s*HTTP/%{BASE10NUM:httpversion}\s*%{WORD:verb}\s*%{NOTSPACE:url}\s*\|%{BASE10NUM:Status}\|\s*%{BASE10NUM:body_bytes_sent}\s*%{BASE10NUM:request_time}\s*%{NOTSPACE:referer}\s*%{QUOTEDSTRING:agent}\s*%{IPV4:upstream}\:%{BASE10NUM:upstream_port}\s*%{BASE10NUM:upstream_response_time}\s*%{BASE10NUM:upstream_status}
调试 grok 正则表达式:https://grokdebug.herokuapp.com/
注意 logstash 在启动时,会读取配置目录中所有以
.conf
结尾的文件,各配置文件不要存在错误,即使没有作用。
启动 logstash
/usr/local/logstash/bin/logstash -f /usr/local/logstash/conf/nginx-assess.conf
日志文件格式,可以根据 此格式生成多条日志记录
100.155.1.33:46175|35.136.45.21 10/Jun/2019:15:24:31 +0800 HTTP/1.1 GET http://api.XX.XX/xx?XX= |200| 2460 0.187 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 Smart_XX 1.0.0 1.0.0" 172.168.32.1:80 0.187 200
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有