ELK基于这三个开源日志的收集、存储、检索和可视化的解决方案;可帮助用户快速定位和分析应用程序的故障,监控应用程序性能和安全,以及提供丰富的数据分析和展示功能。
ELK是一个完整的处理分析日志的系统
收集:能够采集多种来源的日志数据
传输:能够稳定的把日志数据解析过滤并传输到存储系统
存储:存储日志数据
分析:支持 UI 分析
警告:能够提供错误报告,监控机制
日志主要包括系统日志、应用程序日志和安全日志;运维人员经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。
单台机器的日志我们使用grep、awk等工具能实现简单分析,但当日志被分散的储存不同的设备上这样就很繁琐、效率低下,所以会将所有服务器上的日志集中化管理;但日志的统计和检索又成为一件比较麻烦的事情,所以构建一套集中式日志系统,可以提高定位问题的效率。
input 数据采集、output 数据输出、filter 数据过滤
logstash作为日志搜集器,从数据源采集数据,并对数据进行过滤,格式化处理,然后交由Elasticsearch存储,kibana对日志进行可视化处理
提供一个分布式多用户功能的全文搜索引擎,对各类数据实时的索引和查询、高可用性和水平扩展性;存放各类日志,搜索各类大型文档。
搜索速度非常的快,轻微的延迟。
将一个或多个节点组织在一起,组成一个cluster集群。
集群有一个唯一标志的名字,默认Elasticasearch,每个节点基于集群名字加入到集群中,且在集群中使用自己的名字来身份标识。
每一个节点就是一台单台服务器。
一个索引由一个名字来标识(必须全部是小写字母),并且当我们要多对应这个索引中的文档进行索引、更新、删除的时候,都要使用到这个名字。
在一个索引中,你可以定义一个或多种类型。
比如:当我们存储一个购物平台的数据时,可以定义一个用户数据类型,产品数据类型等。
一个文档是一个可被索引的基础信息单元
数据处理工具,可以有多个来源采集数据,对数据进行过滤和转换增强,将数据发给Elasticsearch或其它目的地。
日志的收集者,并对其格式化
日志的存储者
日志hub,hub——做链接作用
搜索和存储
基于Web的展示界面
针对ElasticSearch的数据可视化平台,可通过各种图表、仪表盘和地图来展示和搜索ElasticSearch的其中数据。
它可以整合数据分析、接口灵活、可视化多数据源
主机名 | 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 |
- systemctl stop firewalld
- setenforce 0
-
- hostnamectl set-hostname node1
- hostnamectl set-hostname node2
- hostnamectl set-hostname logstash
默认的是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)
- --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"]
使用上述方式查看群集的状态对用户并不友好,可以通过安装 Elasticsearch-head 插件,可以更方便地管理群集。
安装 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
- #安装会稍微久一点
- #上传安装包上传到/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
- #将包上传到/opt目录下
-
- tar -zxvf elasticsearch-head.tar.gz -C /usr/local/src/
- cd /usr/local/src/elasticsearch-head
- npm install
- --末尾添加以下内容--
- http.cors.enabled: true #开启跨域访问支持,默认为 false
- http.cors.allow-origin: "*" #指定跨域访问允许的域名地址为所有
-
- systemctl restart 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"}'
-
- #插入索引
- yum -y install httpd
- systemctl start httpd
-
- yum -y install java
- java -version
- 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/
让其收集系统日志/var/log/messages,并将其输出到 elasticsearch 中
- #上传软件包 kibana-5.5.1-x86_64.rpm 到/opt目录
-
- cd /opt
- rpm -ivh kibana-5.5.1-x86_64.rpm
- 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"
在Logstash服务器操作
vim /etc/logstash/conf.d/apache_log.conf