1、定义
ELK是一套完整的日志集中处理方案,由三个开源软件简称组成****【面试题。面试问每个组件是干什么用的】****
①E:ElasticSearch(ES),一个开源的、分布式的存储检索引擎(索引型的非关系型数据库)
由java代码开发的,基于Lucene结构开发的一套全文检索引擎,拥有一个web接口,用户可以通过浏览器的形式和ES组件进行通信
作用:存储日志
存储形式:允许全文搜索或结构化搜索(指定索引点进行搜索),索引点支持大容量的日志数据,并支持搜索其他不同类型的文档
②K:Kiabana,图形化界面,能更好的分析存储在ES上的日志数据,提供了一个图形化的界面来浏览ES上的日志数据
作用:浏览、汇总、分析、搜索日志
③L:Logstash,数据收集引擎,支持实时的从各种服务应用收集日志资源,并对收集到的日志数据过滤、分析,在一定程度上丰富日志数据,还可以统一格式等操作,最后数据同步到ES存储引擎
由RUBY语言编写,运行在java虚拟机上的一个强大的数据处理工具,数据传输、格式化处理、格式化输出
作用:实时收集、处理日志
日志流向:
Logstash****→**** ES****→**** Kiabana
(1) ELK的作用
当我们管理一个大集群时,需要分析和定位的日志很多,每一台服务器分别去分析,将会耗时耗力,应运而生一个集中统一的日志管理和分析系统,极大提高定位问题的效率
(2) ELK的特征
①收集日志。市面上常用的软件都可以收集日志
②传输日志。收集到的日志需要发送到ES上
③存储日志。ES负责存储数据
④图形化界面。kiabana负责显示图形化界面
2、数据收集工具
轻量级的开源的日志收集工具:filebeat。收集速度快,但没有数据分析和过滤的能力,一般结合logstash一起使用
中间件消息队列工具:kafka、RabbitMQ
3、数据流向和架构图
4、ES性能调优 (实验环境中安装启动ES前不要调整此性能)
(1) 打开的最大文件数/etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 32000
* hard nproc 32000
* soft memlock unlimited
* hard memlock unlimited #不限制使用内存大小
reboot重启生效
(2)系统配置优化文件/etc/systemd/system.conf
末尾添加
reboot重启生效
DefaultLimitNOFILE=65536
一个用户会话的默认最大文件描述符的限制量
文件描述符:用于标识打开文件或者I/O资源的整数
DefaultLimitNPROC=32000
一个用户可以打开的最大进程数量的限制32000个(一个用户的终端可以运行多少个进程)
DefaultLimitMEMLOCK=infinity
一个用户的终端默认锁定内存的限制,infinity不限制
(3)内核优化vim /etc/sysctl.conf
ES基于lucene架构,可以利用操作系统的内存缓存ES的索引数据,可以提供更快的查询速度。在工作中,会把系统的一半内存留给lucene
部署ES的通用规则:
①机器内存<64G,50%给ES,50%给操作系统,让操作系统的内存给ES缓存数据
②机器内存>64G,ES分配4G~32G即可,其余皆给操作系统,让操作系统的内存给ES缓存数据
末尾添加vm.max_map_count=262144
一个进程可以拥有的最大内存映射区参数
内存映射:将文件或其他设备映射到进程地址空间的方法,允许进程直接读取或写入文件,无需常规的I/O读写方式。映射空间越大,ES和lucene的速度越快
|--------------|-------------------|
| 内存大小 | 最大内存映射区参数 |
| 2g | 262144 |
| 4g | 4194304 |
| 8g | 8388608 |
5、搭建ELK集群实验
****实验目的:****一体化查看日志
实验条件:
|-------------|------------------|--------------|-------------------------------|-------------------------|
| 主机名 | 服务器 | IP地址 | 组件 | 硬件 (最少) |
| test2 | es1 | 20.0.0.20 | ES+node+phantomjs+phantomjs组件 | 2核4G |
| test3 | es2 | 20.0.0.30 | ES+node+phantomjs+phantomjs组件 | 2核4G |
| test1 | logstash+kiabana | 20.0.0.10 | logstash+kiabana | 4核8G |
实验步骤:
1、es1、es2安装ES组件
(1) 修改ES组件的配置文件****【严格执行标准格式,错误不会报错】****
vim /etc/elasticsearch/elasticsearch.yml
es1
es2
(2)重启,设置成开机自启
日志文件路径tail -f /var/log/elasticsearch/my-elk-cluster.log
(3)检测ES配置文件grep -v "^#" /etc/elasticsearch/elasticsearch.yml
(4)测试ES组件
(5)检查集群的健康状态
http://20.0.0.20:9200/_cluster/health?pretty
ES组件安装完成
2、es1、es2安装图形化依赖环境
(1)安装C语言环境yum install gcc gcc-c++ make -y
(2)安装node组件
tar -xf node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure
make && make install
(3)安装phantomjs组件
【WebKit插件。PhantomJS是一种没有图形用户界面的网络浏览器】
(4)安装elasticsearch-head-master数据可视化工具
|------|--------------|
| 9100 | 可视化工具的访问端口 |
| 9200 | ES数据库对外访问的端口 |
| 9300 | ES数据库内部访问的端口 |
①修改ES-head配置文件
vim /etc/elasticsearch/elasticsearch.yml
尾行添加
http.cors.enabled: true
http.cors.allow-origin: "*"
②后台打开可视化界面服务npm run start &
(5)测试可视化工具http://20.0.0.30:9100/
可视化工具完成
(6)插入索引
curl -X PUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"yst","mesg":"heelo world"}'
插入一个测试索引,索引为 index-demo,类型为 test
插入索引前:
插入索引后:
加粗的黑框是主索引节点,没加黑框的是普通索引
3、test1安装logstash组件
rpm -ivh logstash-6.7.2.rpm
|------------|----------------------------------|
| logstash命令常用选项 ||
| -f | 指定配置文件,根据配置文件识别输入和输出流 |
| -e | 测试。从命令行中获取输入,经过logstash加工后形成标准输出 |
| -d | 检测配置文件是否正确,然后退出 |
(1)测试logsstash
①从键盘上发送,输出到界面
logstash -e 'input { stdin{} } output { stdout{} }'
input从哪里来
stdin从键盘来
output到哪里去
所有的键盘命令行输出转化成标准输出(rubydebug模式),6.0后,logstash的默认输出格式就是rubydebug格式的标准输出
②往ES服务器上发送(指定ES地址),浏览器访问
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["20.0.0.20:9200","20.0.0.30:9200"] } }'
4、test1安装kibana组件
(1)修改kibana配置文件
rpm -ivh kibana-6.7.2-x86_64.rpm
(2)创建日志文件
(3)重启kibana
(4)测试kibana组件http://20.0.0.10:5601/
(5)测试发送数据到ES服务器上
将message收集的日志文件发送到system.conf中
创建vim system.conf
logstash -f system.conf --path.data /opt/test1 &
重启elasticsearch.service,测试test1是否收到test2的日志数据。收到
5、ELK收集nginx的json格式日志
logstash -f nginx.conf --path.data /opt/test8 &
访问nginx,收集日志