机器 | IP | 组件 | 版本 |
---|---|---|---|
elk1 | 10.10.0.1 | Elasticsearch/Kibana | 6.3.2 |
elk2 | 10.10.0.2 | Elasticsearch | 6.3.2 |
elk3 | 10.10.0.3 | Elasticsearch | 6.3.2 |
日志主要包括系统日志和应用程序日志,运维和开发人员可以通过日志了解服务器中软硬件的信息,检查应用程序或系统的故障,了解故障出现的原因,以便解决问题。分析日志可以更清楚的了解服务器的状态和系统安全状况,从而可以维护服务器稳定运行。
但是日志通常都是存储在各自的服务器中。如果管理数十台服务器, 查阅日志需要依次登陆不同的服务器,查看过程就会很繁琐从而导致工作效率低下。虽然可以使用 rsyslog 服务将日志汇总。但是统计一些日志中的数据或者检索也是很麻烦的,一般使用grep、awk、wc、sort等Linux命令来统计和检索。如果对数量巨大的日志进行统计检索,人工的效率还是十分低下。
通过我们对日志进行收集、汇总到一起,完整的日志数据具有非常重要的作用:
ELK简介
ELK实时日志收集分析系统可以完美的解决以上问题。ELK作为一款开源软件可以免费使用,也有强大的团队和社区对它实时更新。
ELK主要由ElasticSearch、Logstash和Kibana三个开源工具组成,还有其他专门由于收集数据的轻量型数据采集器Beats。
Elasticsearch :分布式搜索引擎。具有高可伸缩、高可靠、易管理等特点。可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 是用Java 基于 Lucene 开发,现在使用最广的开源搜索引擎之一,Wikipedia 、StackOverflow、Github 等都基于它来构建自己的搜索引擎。
在elasticsearch中,所有节点的数据是均等的。
Logstash :数据收集处理引擎。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。
Kibana :可视化化平台。它能够搜索、展示存储在 Elasticsearch 中索引数据。使用它可以很方便的用图表、表格、地图展示和分析数据。
Filebeat:轻量级数据收集引擎。相对于Logstash所占用的系统资源来说,Filebeat 所占用的系统资源几乎是微乎及微。它是基于原先 Logstash-fowarder 的源码改造出来。换句话说:Filebeat就是新版的 Logstash-fowarder,也会是 ELK Stack 在 Agent 的第一选择。
版本说明
Elasticsearch、Logstash、Kibana、Filebeat安装的版本号必须全部一致,不然会出现kibana无法显示web页面。
ELK工作演示图:
常见的三种架构
第三种方案的架构图:
hostnamectl set-hostname elk1
hostnamectl set-hostname elk2
hostnamectl set-hostname elk3
...
cat >> /etc/hosts <
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
echo "* soft nofile 655350" >> /etc/security/limits.conf
echo "* hard nofile 655350" >> /etc/security/limits.conf
各组件版本最好一致,本文以6.3.2版本为例
https://www.elastic.co/cn/downloads/past-releases
rpm -ivh jdk-8u202-linux-x64.rpm
cat >> /etc/profile <
source /etc/profile
rpm -ivh elasticsearch-6.3.2.rpm
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service
unzip ik.zip && rm -rf ik.zip && mv ik/ /usr/share/elasticsearch/plugins/
分别修改各节点配置文件
vim /etc/elasticsearch/elasticsearch.yml
node.master: true
node.data: true
cluster.name: ELK
node.name: node-1
path.data: /data1/es/data
path.logs: /data1/es/logs
path.repo: ["/data1/es/backups"]
network.host: 10.10.0.1
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.10.0.1", "10.10.0.2", "10.10.0.3"]
cluster.routing.allocation.disk.watermark.low: "90%"
http.enabled: true
http.cors.enabled: true
http.cors.allow-origin: "*"
discovery.zen.minimum_master_nodes: 1
xpack.security.enabled: false
vim /etc/elasticsearch/jvm.options
# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space
-Xms1g #设置为内存的一半,最大32
-Xmx1g #设置为内存的一半,最大32
vim /etc/sysctl.conf
vm.max_map_count=262144 #添加
sysctl -p #生效
mkdir -p /data1/es/{data,logs,backups}
chmod 777 -R /data1/es/*
配置文件修改完毕,重启ES使配置生效
systemctl restart elasticsearch
集群中任意节点安装,生产环境建议独立机器安装,此处安装在elk1机器
rpm -ivh kibana-6.3.2-x86_64.rpm
官方配置参数详解:https://www.elastic.co/guide/cn/kibana/current/settings.html
vim /etc/kibana/kibana.yml
server.port: 5601
server.host: "10.10.0.1"
elasticsearch.url: "http://10.10.0.1:9200"
kibana.index: ".kibana"
logging.dest: /data1/kibana/logs/kibana.log
mkdir -p /data1/kibana/logs
touch /data1/kibana/logs/kibana.log
chmod o+rw /data1/kibana/logs/kibana.log
systemctl start kibana && systemctl enable kibana && systemctl status kibana
浏览器访问Kibana,http://10.10.0.1:5601
适用于要使用Logstash对日志进行过滤的场景或组件,以系统日志(/var/log/messages)为例说明,这里收集elk2机器上的系统日志,所以Logstash安装在elk2机器,其他大体相同
机器 | IP | 组件 | 版本 |
---|---|---|---|
elk1 | 10.10.0.1 | Elasticsearch/Kibana | 6.3.2 |
elk2 | 10.10.0.2 | Elasticsearch/Logstash | 6.3.2 |
elk3 | 10.10.0.3 | Elasticsearch | 6.3.2 |
这里因为是与ES机器(elk2)放在一起,前面已经安装过了所以跳过,生产环境如果Logstash跟别的组件在一起或者单独一台机器则需要先安装java
rpm -ivh jdk-8u202-linux-x64.rpm
cat >> /etc/profile <
source /etc/profile
rpm -ivh logstash-6.3.2.rpm
vim /etc/logstash/jvm.options
# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space
-Xms1g #设置为内存的一半,最大32
-Xmx1g #设置为内存的一半,最大32
vim /etc/logstash/logstash.yml
node.name: logstash
path.data: /data1/logstash/data
http.host: "10.10.0.2"
http.port: 9600
path.logs: /data1/logstash/logs
mkdir -p /data1/logstash/{data,logs}
chmod 777 -R /data1/logstash/*
chown -R logstash:logstash /data1/logstash/
安装完Logstash + Elasticsearch + Kibana之后,不急启动Logstash,采集日志数据,需要有数据源,这里以rsyslog 为例说明,其他组件大体相似
vim /etc/rsyslog.conf
*.* @@10.10.0.2:10514
systemctl restart rsyslog
用于接收rsyslog的日志
vim /etc/logstash/conf.d/syslog.conf
input {
syslog {
type => "system-syslog"
port => 10514
}
}
output {
elasticsearch {
hosts => ["10.10.0.1:9200","10.10.0.2:9200","10.10.0.3:9200"]
index => "system-syslog-%{+YYYY.MM}"
}
}
/usr/share/logstash/bin/logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/syslog.conf --config.test_and_exit
systemctl start logstash && systemctl enable logstash && systemctl status logstash
等待一会等系统有日志产生时,可以在ES集群中看到生成了system-syslog-*类型的日志数据
打开Kibana web页面,http:10.10.0.1:5601
适用于不需要使用Logstash对日志进行过滤的场景或组件,还是以系统日志(/var/log/messages)为例说明,这里收集elk3机器上的系统日志,所以filebeat安装在elk3机器,其他大体相同
机器 | IP | 组件 | 版本 |
---|---|---|---|
elk1 | 10.10.0.1 | Elasticsearch/Kibana | 6.3.2 |
elk2 | 10.10.0.2 | Elasticsearch | 6.3.2 |
elk3 | 10.10.0.3 | Elasticsearch/Filebeat | 6.3.2 |
rpm -ivh filebeat-6.3.2-x86_64.rpm
vim /etc/filebeat/filebeat.yml
不使用logstash时直接配置ES地址即可,logstash配置注释掉
systemctl start filebeat && systemctl enable filebeat && systemctl status filebeat
等待一会等系统有日志产生时,可以在ES集群中看到生成了filebeat-*类型的日志数据
打开Kibana web页面,http:10.10.0.1:5601
filebeat采集日志,Logstash对日志进行过滤,还是以系统日志(/var/log/messages)为例说明,filebeat需要安装在被采集的机器上,Logstash任意即可,生产环境建议选择一台ES节点放到一起,这里以和filebeat安装在一起为例
机器 | IP | 组件 | 版本 |
---|---|---|---|
elk1 | 10.10.0.1 | Elasticsearch/Kibana | 6.3.2 |
elk2 | 10.10.0.2 | Elasticsearch | 6.3.2 |
elk3 | 10.10.0.3 | Elasticsearch | 6.3.2 |
采集机器 | 10.10.0.4 | Logstash/Filebeat | 6.3.2 |
rpm -ivh jdk-8u202-linux-x64.rpm
cat >> /etc/profile <
source /etc/profile
rpm -ivh logstash-6.3.2.rpm
vim /etc/logstash/jvm.options
# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space
-Xms1g #设置为内存的一半,最大32
-Xmx1g #设置为内存的一半,最大32
vim /etc/logstash/logstash.yml
node.name: logstash
path.data: /data1/logstash/data
http.host: "10.10.0.4"
http.port: 9600
path.logs: /data1/logstash/logs
mkdir -p /data1/logstash/{data,logs}
chmod 777 -R /data1/logstash/*
chown -R logstash:logstash /data1/logstash/
vim /etc/logstash/conf.d/logstash-filebeat-syslog.conf
input {
beats {
port => 5044
}
}
filter {
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
add_field => [ "received_at", "%{@timestamp}" ]
add_field => [ "received_from", "%{host}" ]
}
syslog_pri { }
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
}
}
output {
elasticsearch {
hosts => [ "10.10.0.1:9200","10.10.0.2:9200","10.10.0.3:9200" ]
index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
}
}
/usr/share/logstash/bin/logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/logstash-filebeat-syslog.conf --config.test_and_exit
systemctl start logstash && systemctl enable logstash && systemctl status logstash
rpm -ivh filebeat-6.3.2-x86_64.rpm
vim /etc/filebeat/filebeat.yml
使用logstash时将ES配置注释,打开logstash配置并修改
systemctl start filebeat && systemctl enable filebeat && systemctl status filebeat
等待一会等系统有日志产生时,可以在ES集群中看到生成了filebeat-*类型的日志数据
打开Kibana web页面,http:10.10.0.1:5601