目录
2、缓存/消息队列(redis、kafka、RabbitMQ等)
③安装 Elasticsearch-head 数据可视化工具
⑥通过 Elasticsearch-head 查看 Elasticsearch 信息
3、 ELK Logstash 部署(在 Nginx 节点上操作)
一、日志管理方案
1、服务器数量较少时
可以直接登录到目标主机查看日志,通过rsyslog工具或编写shell、python脚本实现日志收集,并集中保存到统一的日志服务器
2、服务区数量较多时
使用ELK大型日志系统,实现日志收集、存储、检索和分析
3、容器环境
使用ELK或Loki+Granfana
二、完整日志系统基本特征
收集:能够采集多种来源的日志数据
传输:能够稳定的把日志数据解析过滤并传输到存储系统
存储:存储日志数据
分析:支持UI分析
警告:能够提供错误报告,监控机制
三、ELK 简介
ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。
ELK组件:
1、ElasticSearch
是基于Lucene(一个全文检索引擎的架构)开发的分布式存储检索数据库引擎,用来存储各类日志,并创建索引,方便全文检索。集群化部署,节点分三种类型:master/data/client,设置相同的cluster.name并使用Zen Discovery模块通过单播实现集群中节点的服务发现。
2、Logstash
作为数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置,一般会发送给 Elasticsearch。
Logstash 由 Ruby 语言编写,运行在 Java 虚拟机(JVM)上,是一款强大的数据处理工具, 可以实现数据传输、格式处理、格式化输出。Logstash 具有强大的插件功能,常用于日志处理。
3、Kibana
Kibana 通常与 Elasticsearch 一起部署,Kibana 是 Elasticsearch 的一个功能强大的数据可视化 Dashboard,Kibana 提供图形化的 web 界面来浏览 Elasticsearch 日志数据,可以用来汇总、分析和搜索重要数据。
可以添加的其它组件:
1、Filebeat
轻量级的开源日志文件数据搜集器。通常在需要采集数据的客户端安装 Filebeat,并指定目录与日志格式,Filebeat 就能快速收集数据,并发送给 logstash 进行解析,或是直接发给 Elasticsearch 存储,性能上相比运行于 JVM 上的 logstash 优势明显,是对它的替代。常应用于 EFLK 架构当中
2、缓存/消息队列(redis、kafka、RabbitMQ等)
可以对高并发日志数据进行流量削峰和缓冲,这样的缓冲可以一定程度的保护数据不丢失,还可以对整个架构进行应用解耦
3、Fluentd
是一个流行的开源数据收集器。由于 logstash 太重量级的缺点,Logstash 性能低、资源消耗比较多等问题,随后就有 Fluentd 的出现。相比较 logstash,Fluentd 更易用、资源消耗更少、性能更高,在数据处理上更高效可靠,受到企业欢迎,成为 logstash 的一种替代方案,常应用于 EFK 架构当中。在 Kubernetes 集群中也常使用 EFK 作为日志数据收集的方案。
在 Kubernetes 集群中一般是通过 DaemonSet 来运行 Fluentd,以便它在每个 Kubernetes 工作节点上都可以运行一个 Pod。 它通过获取容器日志文件、过滤和转换日志数据,然后将数据传递到 Elasticsearch 集群,在该集群中对其进行索引和存储。
三、ELK 的工作原理
(1)在所有需要收集日志的服务器上部署Logstash;或者先将日志进行集中化管理在日志服务器上,在日志服务器上部署 Logstash。
(2)Logstash 收集日志,将日志格式化并输出到 Elasticsearch 群集中。
(3)Elasticsearch 对格式化后的数据进行索引和存储。
(4)Kibana 从 ES 群集中查询数据生成图表,并进行前端数据的展示。
四、ELK部署
1、Elasticsearch部署
①关闭防火墙和安全机制
systemctl disable --now firewalld
setenforce 0
②设置Java环境
tar xf jdk-8u361-linux-x64.tar.gz
mv jdk1.8.0_361/ /usr/local/
vim /etc/profile.d/java.sh
source /etc/profile.d/java.sh
java -version
③安装elasticsearch—rpm包
上传elasticsearch-6.7.2.rpm到/opt目录下
使用命令rpm -ivh elasticsearch-6.7.2.rpm或yum localinstall elasticsearch-6.7.2.rpm进行安装
④修改elasticsearch主配置文件
vim /etc/elasticsearch/elasticsearch.yml
scp /etc/elasticsearch/elasticsearch.yml 192.168.130.20:`pwd`
scp /etc/elasticsearch/elasticsearch.yml 192.168.130.30:`pwd`
⑤es 性能调优参数
优化最大内存大小和最大文件描述符的数量
vim /etc/security/limits.conf
vim /etc/systemd/system.conf
优化elasticsearch用户拥有的内存权限
vim /etc/sysctl.conf
一个进程可以拥有的最大内存映射区域数,参考数据(分配 2g/262144,4g/4194304,8g/8388608)
sysctl -p
需重启系统生效配置
reboot
⑥启动elasticsearch是否成功开启
systemctl enable --now elasticsearch.service
⑦查看节点信息
浏览器访问 http://192.168.130.10:9200 、 http://192.168.130.20:9200、 http://192.168.130.30:9200 查看节点 Node01、Node02 、Node03的信息
2、安装 Elasticsearch-head 插件
Elasticsearch 在 5.0 版本后,Elasticsearch-head 插件需要作为独立服务进行安装,需要使用npm工具(NodeJS的包管理工具)安装。
作用:在web界面实现图形化查看es集群状态,可以在任意一个es节点安装
①编译安装 node
上传软件包 node-v8.2.1.tar.gz 到/opt
②安装 phantomjs
上传软件包 phantomjs-2.1.1-linux-x86_64.tar.bz2 到/opt
③安装 Elasticsearch-head 数据可视化工具
上传软件包 elasticsearch-head-master.zip 到/opt
④修改 Elasticsearch 主配置文件
vim /etc/elasticsearch/elasticsearch.yml
systemctl restart elasticsearch
⑤启动 elasticsearch-head 服务
必须在解压后的 elasticsearch-head 目录下启动服务,进程会读取该目录下的 gruntfile.js 文件,否则可能启动失败
cd /opt/elasticsearch-head-master/
npm run start &
⑥通过 Elasticsearch-head 查看 Elasticsearch 信息
浏览器访问 http://192.168.130.30:9100/
⑦插入索引
通过命令插入一个测试索引
3、 ELK Logstash 部署(在 Nginx 节点上操作)
Logstash 一般部署在需要监控其日志的服务器。在本案例中,Logstash 部署在 nginx 服务器上,用于收集 nginx 服务器的日志信息并发送到 Elasticsearch。
①关闭防火墙和安全机制
systemctl disable --now firewalld
setenforce 0
②更改主机名
hostnamectl set-hostname nginx
③设置Java环境
tar xf jdk-8u361-linux-x64.tar.gz
mv jdk1.8.0_361/ /usr/local/
vim /etc/profile.d/java.sh
source /etc/profile.d/java.sh
java -version
④安装nginx服务
yum -y install epel-release.noarch
yum -y install nginx
systemctl enable --now nginx
⑤安装logstash
上传软件包 logstash-6.7.2.rpm 到/opt目录下
⑥测试 Logstash
logstash -e 'input { stdin{} } output { stdout{} }'
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.130.10:9200"] } }'
⑦定义 logstash配置文件,读取nginx日志
vim /etc/logstash/conf.d/nginx.conf
input{
file {
path => "/var/log/nginx/access.log"
type => "nginx_access"
start_position => "beginning"
sincedb_path => "/etc/logstash/sincedb_path/log_progress"
add_field => { "log_hostname" => "${HOSTNAME}" }
}
file {
path => "/var/log/nginx/error.log"
type => "nginx_error"
start_position => "beginning"
sincedb_path => "/etc/logstash/sincedb_path/log_progress"
add_field => { "log_hostname" => "${HOSTNAME}" }
}
}
#filter{}
output{
if [type] == "nginx_access" {
elasticsearch{
hosts => ["192.168.130.10:9200","192.168.130.20:9200","192.168.130.30:9200"]
index => "nginx_access-%{+yyyy.MM.dd}"
}
}
if [type] == "nginx_error" {
elasticsearch{
hosts => ["192.168.130.10:9200","192.168.130.20:9200","192.168.130.30:9200"]
index => "nginx_error-%{+yyyy.MM.dd}"
}
}
}
logstash -f nginx.conf #启动logstash
4、ELK Kiabana 部署 Kiabana
Kiabana可以安装在任一节点
①安装 Kiabana
上传软件包 kibana-6.7.2-x86_64.rpm 到/opt目录
②设置 Kibana 的主配置文件
vim /etc/kibana/kibana.yml
touch /var/log/kibana.log
chown kibana. /var/log/kibana.log
systemctl enable --now kibana.service
③创建索引
浏览器访问 http://192.168.130.30:5601