一、ELK日志分析系统
1、ELK的组成
- ElasticSearch
- LogStash
- Kibana
ELK基于这三个开源日志的收集、存储、检索和可视化的解决方案;可帮助用户快速定位和分析应用程序的故障,监控应用程序性能和安全,以及提供丰富的数据分析和展示功能。
2、完整日志系统特征
ELK是一个完整的处理分析日志的系统
收集:能够采集多种来源的日志数据
传输:能够稳定的把日志数据解析过滤并传输到存储系统
存储:存储日志数据
分析:支持 UI 分析
警告:能够提供错误报告,监控机制
3、ELK的优点
日志主要包括系统日志、应用程序日志和安全日志;运维人员经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。
单台机器的日志我们使用grep、awk等工具能实现简单分析,但当日志被分散的储存不同的设备上这样就很繁琐、效率低下,所以会将所有服务器上的日志集中化管理;但日志的统计和检索又成为一件比较麻烦的事情,所以构建一套集中式日志系统,可以提高定位问题的效率。
4、ELK工作原理
- 在所有需要收集日志的服务器上部署Logstash;或者先将日志进行集中化管理在日志服务器上,在日志服务器上部署 Logstash
- Logstash 收集日志,将日志格式化并输出到 Elasticsearch 群集中
- Elasticsearch 对格式化后的数据进行索引和存储
- Kibana 从 ES 群集中查询数据生成图表,并进行前端数据的展示
input 数据采集、output 数据输出、filter 数据过滤
logstash作为日志搜集器,从数据源采集数据,并对数据进行过滤,格式化处理,然后交由Elasticsearch存储,kibana对日志进行可视化处理
二、Elasticsearch概述
提供一个分布式多用户功能的全文搜索引擎,对各类数据实时的索引和查询、高可用性和水平扩展性;存放各类日志,搜索各类大型文档。
Elasticserach特性
- 接近实时
搜索速度非常的快,轻微的延迟。
- 集群(cluster)
将一个或多个节点组织在一起,组成一个cluster集群。
集群有一个唯一标志的名字,默认Elasticasearch,每个节点基于集群名字加入到集群中,且在集群中使用自己的名字来身份标识。
- 节点(node)
每一个节点就是一台单台服务器。
- 索引(index)
一个索引由一个名字来标识(必须全部是小写字母),并且当我们要多对应这个索引中的文档进行索引、更新、删除的时候,都要使用到这个名字。
- 类型(type)
在一个索引中,你可以定义一个或多种类型。
比如:当我们存储一个购物平台的数据时,可以定义一个用户数据类型,产品数据类型等。
- 文档(document)
一个文档是一个可被索引的基础信息单元
三、Logstash概述
数据处理工具,可以有多个来源采集数据,对数据进行过滤和转换增强,将数据发给Elasticsearch或其它目的地。
Logstash组件
- Shipper
日志的收集者,并对其格式化
- Indexer
日志的存储者
- Broker
日志hub,hub——做链接作用
- Search and Storage
搜索和存储
- Web Interface
基于Web的展示界面
四、Kibana概述
针对ElasticSearch的数据可视化平台,可通过各种图表、仪表盘和地图来展示和搜索ElasticSearch的其中数据。
它可以整合数据分析、接口灵活、可视化多数据源
五、ELK系统部署
1、部署环境
主机名 | ip地址 | 主要软件 | 系统 |
---|---|---|---|
node1 | 192.168.154.70 | ElasticSearh、Kibana | Centos7.5 |
node2 | 192.168.154.60 | ElasticSearh | Centos7.5 |
Apache | 192.168.154.50 | Logstash、Apache | Centos7.5 |
2、部署ElasticSearh(node1、2)
关闭防火墙、修改主机名(所有主机)
systemctl stop firewalld
setenforce 0
hostnamectl set-hostname node1
hostnamectl set-hostname node2
hostnamectl set-hostname logstash
安装JDK,加载系统服务
默认的是open jdk,不建议使用(ES是java开发的)
java -version #如果没有安装,yum -y install java
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
修改elasticsearch主配置文件
--17--取消注释,指定集群名字
cluster.name: my-elk-cluster
--23--取消注释,指定节点名字:Node1节点为node1,Node2节点为node2
node.name: node1
--33--取消注释,指定数据存放路径
path.data: /data/elk_data
--37--取消注释,指定日志存放路径
path.logs: /var/log/elasticsearch/
--43--取消注释,改为在启动的时候不锁定内存
bootstrap.memory_lock: false
--55--取消注释,设置监听地址,0.0.0.0代表所有地址
network.host: 0.0.0.0
--59--取消注释,ES 服务的默认监听端口为9200
http.port: 9200
--68--取消注释,集群发现通过单播实现,指定要发现的节点 node1、node2
discovery.zen.ping.unicast.hosts: ["node1", "node2"]
创建数据存放路径并授权、开启ES服务
查看节点信息
使用上述方式查看群集的状态对用户并不友好,可以通过安装 Elasticsearch-head 插件,可以更方便地管理群集。
2.1、安装 Elasticsearch-head 插件
编译安装 node
安装 Elasticsarch-head 需要提前安装好依赖软件 node 和 phantomjs
yum -y install gcc gcc-c++ make
cd /opt
tar xzvf node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure
make -j4 &&make install
#安装会稍微久一点
安装 phantomjs(前端的框架)
#上传安装包上传到/opt目录下
cd /opt
tar -jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src
cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin
安装 Elasticsearch-head 数据可视化工具
#将包上传到/opt目录下
tar -zxvf elasticsearch-head.tar.gz -C /usr/local/src/
cd /usr/local/src/elasticsearch-head
npm install
修改 Elasticsearch 主配置文件
--末尾添加以下内容--
http.cors.enabled: true #开启跨域访问支持,默认为 false
http.cors.allow-origin: "*" #指定跨域访问允许的域名地址为所有
systemctl restart elasticsearch
启动 elasticsearch-head 服务
通过 Elasticsearch-head 查看 Elasticsearch 信息
插入索引
#通过命令插入一个测试索引,索引为 index-demo,类型为 test
curl -X PUT 'localhost:9200/index-demo1/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
#插入索引
3、部署Logstash
安装Apahce服务、Java环境
yum -y install httpd
systemctl start httpd
yum -y install java
java -version
安装Logstash
cd /opt
rpm -ivh logstash-5.5.1.rpm
systemctl start logstash.service
systemctl enable logstash.service
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
测试 Logstash
修改 Logstash 配置文件
让其收集系统日志/var/log/messages,并将其输出到 elasticsearch 中
4、Kibana
安装 Kiabana
#上传软件包 kibana-5.5.1-x86_64.rpm 到/opt目录
cd /opt
rpm -ivh kibana-5.5.1-x86_64.rpm
设置 Kibana 的主配置文件、并启动
vim /etc/kibana/kibana.yml
--2--取消注释,Kiabana 服务的默认监听端口为5601
server.port: 5601
--7--取消注释,设置 Kiabana 的监听地址,0.0.0.0代表所有地址
server.host: "0.0.0.0"
--21--取消注释,设置和 Elasticsearch 建立连接的地址和端口
elasticsearch.url: "http://192.168.10.13:9200"
--30--取消注释,设置在 elasticsearch 中添加.kibana索引
kibana.index: ".kibana"
验证 Kibana
将 Apache 服务器的日志 添加到 Elasticsearch 并通过 Kibana 显示
在Logstash服务器操作
vim /etc/logstash/conf.d/apache_log.conf