一、ELK介绍
ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。
1. Elasticsearch
Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎,它可实现数据的实时全文搜索。搜索、支持分布式可实现高可用、提供 API 接口,可以处理大规模日志数据,比如 Nginx、Tomcat、系统日志等功能。Elasticsearch 使用 Java 语言开发,是建立在全文搜索引擎 Apache Lucene 基础之上的搜索引擎。
Elasticsearch 的特点:
-
实时搜索、实时分析
-
分布式架构、实时文件存储
-
文档导向,所有对象都是文档
-
高可用,易扩展,支持集群,分片与复制
-
接口友好,支持 json
2. Logstash
Logstash 是一个具有实时传输能力的数据收集引擎,其可以通过插件实现日志收集和转发,支持日志过滤,支持普通 log、自定义 json 格式的日志解析,最终把经过处理的日志发送给 elasticsearch。
3. Kiabana
Kibana 为 elasticsearch 提供一个查看数据的web界面,其主要是通过elasticsearch的API接口进行数据查找,并进行前端数据可视化的展现,另外还可以针对特定格式的数据生成相应的表格、柱状图、饼图等。
4. ELK 工作原理
1.在所有需要收集日志的服务器上部署Logstash;或者先将日志进行集中化管理在日志服务器上,在日志服务器上部署 Logstash。
2.Logstash 收集日志,将日志格式化并输出到 Elasticsearch 群集中。
3.Elasticsearch 对格式化后的数据进行索引和存储。
4.Kibana 从 ES 群集中查询数据生成图表,并进行前端数据的展示。
总结:logstash作为日志搜集器,从数据源采集数据,并对数据进行过滤,格式化处理,然后交由Elasticsearch存储,kibana对日志进行可视化处理。
二、安装部署ELK
1.服务器角色以及配置
点击查看代码
node1节点(8C/8G): 7-6/192.168.204.60 Elasticsearch
node2节点(8C/8G): 7-7/192.168.204.70 Elasticsearch
Apache节点(4C/4G):7-1/192.168.91.103 Logstash Kibana Apache
2.前提准备
关闭防火墙
点击查看代码
systemctl disable --now firewalld
setenforce 0
[root@node1 ~]# vim /etc/selinux/config
SELINUX=disabled
java环境
点击查看代码
[root@node1 ~]# 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)
****3.安装部署Elasticsearch软件(node1和node2)
安装 Elasticsearch 软件
点击查看代码
[root@node6 ~]# cd /opt //切换到opt目录,上传安装包
[root@node6 opt]# ls
elasticsearch-6.7.2.rpm rh
[root@node6 opt]# rpm -ivh elasticsearch-6.7.2.rpm //安装
[root@node6 opt]# cd /etc/elasticsearch/
[root@node6 elasticsearch]# mkdir bak
[root@node6 elasticsearch]# ls
bak elasticsearch.keystore elasticsearch.yml jvm.options log4j2.properties role_mapping.yml roles.yml users users_roles
[root@node6 elasticsearch]# cp -a *.yml bak/ //备份
修改配置文件
点击查看代码
[root@node6 elasticsearch]# vim elasticsearch.yml
17 cluster.name: my-elk-cluster //修改集群名字
23 node.name: node1 //设置节点名称 主从之间不能一致
24 node.master: true //作为主节点
25 node.data: true //作为数据节点
45 bootstrap.memory_lock: true //内存锁开启,禁止使用swap
57 network.host: 0.0.0.0 //监听地址
61 http.port: 9200 //默认使用端口
62 transport.tcp.port: 9300 //内部传输端口
71 discovery.zen.ping.unicast.hosts: ["192.168.204.60:9300", "192.168.204.70:9300"] //自动集群发现,加入主机名,使用单播 类似心跳线
点击查看代码
[root@node6 elasticsearch]# scp elasticsearch.yml 192.168.204.70:/etc/elasticsearch/
//把配置文件拷贝给7-7
[root@node7 ~]# vim /etc/elasticsearch/elasticsearch.yml
node.name: node2 //只需修改这一处
修改系统配置
性能调优参数
点击查看代码
[root@node6 elasticsearch]# vim /etc/security/limits.conf
......
* soft nofile 65536
* hard nofile 65536
* soft nproc 32000
* hard nproc 32000
* soft memlock unlimited
* hard memlock unlimited
修改systemd服务管理器
点击查看代码
[root@node6 elasticsearch]# vim /etc/systemd/system.conf
DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity
修改内核参数
点击查看代码
[root@node6 elasticsearch]# vim /etc/sysctl.conf
vm.max_map_count=262144
//一个进程可以拥有的最大内存映射区域数,参考数据(分配 2g/262144,4g/4194304,8g/8388608)
[root@node6 elasticsearch]# sysctl -p
重启服务器 启动 elasticsearch
点击查看代码
[root@node6 elasticsearch]# reboot
[root@node6 ~]# systemctl start elasticsearch.service
[root@node6 ~]# systemctl status elasticsearch.service
[root@node6 ~]# ss -natp | grep 9200
LISTEN 0 128 :::9200 :::* users:(("java",pid=2602,fd=283))
查看节点信息
点击查看代码
浏览器访问
http://192.168.204.60:9200
http://192.168.204.70:9200
//查看节点 Node1、Node2 的信息
浏览器访问
http://192.168.204.60:9200/_cluster/health?pretty
http://192.168.204.70:9200/_cluster/health?pretty
//查看群集的健康情况,可以看到 status 值为 green(绿色), 表示节点健康运行。
浏览器访问 http://192.168.204.60:9200/_cluster/state?pretty
//检查群集状态信息
安装插件
方法1:谷歌浏览器插件
谷歌浏览器应用商城搜索 Elasticsearch-head 插件进行安装
方法2:编译安装 Elasticsearch-head 插件
Elasticsearch 在 5.0 版本后,Elasticsearch-head 插件需要作为独立服务进行安装,需要使用npm工具(NodeJS的包管理工具)安装。
安装 Elasticsearch-head 需要提前安装好依赖软件 node 和 phantomjs。
-
node:是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
-
phantomjs:是一个基于 webkit 的JavaScriptAPI,可以理解为一个隐形的浏览器,任何基于 webkit 浏览器做的事情,它都可以做到。
- 编译安装node组件
点击查看代码
//上传软件包 node-v8.2.1.tar.gz 到/opt
[root@node6 elasticsearch]# yum install gcc gcc-c++ make -y
[root@node6 elasticsearch]# cd /opt
[root@node6 opt]# tar xf node-v8.2.1.tar.gz
[root@node6 opt]# cd node-v8.2.1/
[root@node6 node-v8.2.1]# ./configure
[root@node6 node-v8.2.1]# make -j4 && make install
- 安装 phantomjs
点击查看代码
//上传软件包 phantomjs-2.1.1-linux-x86_64.tar.bz2 到/opt
[root@node6 node-v8.2.1]# cd /opt
[root@node6 opt]# tar xf phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@node6 opt]# cd phantomjs-2.1.1-linux-x86_64/
[root@node6 phantomjs-2.1.1-linux-x86_64]# ls
bin ChangeLog examples LICENSE.BSD README.md third-party.txt
[root@node6 phantomjs-2.1.1-linux-x86_64]# cd bin/
[root@node6 bin]# ls
phantomjs
[root@node6 bin]# ln -s /opt/phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/bin/
- 安装 Elasticsearch-head 数据可视化工具
点击查看代码
//上传软件包 elasticsearch-head-master.zip 到/opt
[root@node6 bin]# cd /opt
[root@node6 opt]# unzip elasticsearch-head-master.zip
[root@node6 opt]# cd elasticsearch-head-master/
[root@node6 elasticsearch-head-master]# npm install //安装依赖包
- 修改 Elasticsearch 主配置文件
点击查看代码
[root@node6 elasticsearch-head-master]# vim /etc/elasticsearch/elasticsearch.yml
http.cors.enabled: true //开启跨域访问支持,默认为 false
http.cors.allow-origin: "*" //指定跨域访问允许的域名地址为所有
[root@node6 elasticsearch-head-master]# systemctl restart elasticsearch.service //重启服务
- 启动 elasticsearch-head 服务
必须在解压后的 elasticsearch-head-master 目录下启动服务,进程会读取该目录下的 gruntfile.js 文件,否则可能启动失败
点击查看代码
[root@node6 elasticsearch-head-master]# npm run start & //注意要在elasticsearch-head-master目录下执行
4.在应用服务器部署Logstash
在Apache节点上操作
安装logstash
点击查看代码
[root@node1 ~]# cd /opt //切换到opt目录下,上传安装包
[root@node1 opt]# ls
logstash-6.7.2.rpm rh
[root@node1 opt]# rpm -ivh logstash-6.7.2.rpm //安装
[root@node1 opt]# systemctl enable --now logstash.service //开启服务
[root@node1 opt]# ln -s /usr/share/logstash/bin/logstash /usr/bin/ //做软链接
使用logstash 收集日志
Logstash 命令常用选项:
-
-f:通过这个选项可以指定 Logstash 的配置文件,根据配置文件配置 Logstash 的输入和输出流。
-
-e:从命令行中获取,输入、输出后面跟着字符串,该字符串可以被当作 Logstash 的配置(如果是空,则默认使用 stdin 作为输入,stdout 作为输出)。
-
-t:测试配置文件是否正确,然后退出。
点击查看代码
[root@node1 opt]# logstash -e 'input { stdin{} } output { stdout{} }'
//在命令行中收集日志数据,输入采用标准输入,输出采用标准输出(类似管道),等待时间较长
//本地测试,不会在Elasticsearch中留下记录
使用 Logstash 将信息写入 Elasticsearch 中
点击查看代码
[root@node1 opt]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.204.60:9200"] } }'
//结果不在标准输出显示,而是发送至 Elasticsearch 中,可浏览器访问 http://192.168.204.60:9100/ 查看索引信息和数据浏览
使用配置文件
Logstash 配置文件基本由三部分组成:input、output 以及 filter(可选,根据需要选择使用)
点击查看代码
[root@node1 opt]# cd /etc/logstash/conf.d/
[root@node1 conf.d]# vim system-log.conf
input {
file {
path => "/var/log/messages" //path表示要收集的日志的文件位置
type => "system" //type是输入ES时给结果增加一个叫type的属性字段
start_position => "beginning" //start_position可以设置为beginning或者end,beginning表示从头开始读取文件
}
}
output {
elasticsearch { //输出到 elasticsearch
hosts => [ "192.168.204.60:9200" ] //指定 elasticsearch 服务器的地址和端口
index => "system-%{+YYYY.MM.dd}" //指定输出到 elasticsearch 的索引格式
}
}
[root@node1 conf.d]# chmod +r /var/log/messages //添加权限
[root@node1 conf.d]# logstash -f system-log.conf //启动logstash
5.安装kibana
(无所谓安装在哪台服务器)此处安装在apache节点上
安装
点击查看代码
[root@node1 conf.d]# cd /opt //切换到opt目录下,上传安装包
[root@node1 opt]# ls
kibana-6.7.2-x86_64.rpm logstash-6.7.2.rpm rh
[root@node1 opt]# rpm -ivh kibana-6.7.2-x86_64.rpm //安装
修改配置
点击查看代码
[root@node1 opt]# cd /etc/kibana/
[root@node1 kibana]# ls
kibana.yml
[root@node1 kibana]# cp -a kibana.yml kibana.yml.bak
[root@node1 kibana]# vim kibana.yml
2 server.port: 5601 //打开端口
7 server.host: "0.0.0.0" //监听端口
28 elasticsearch.hosts: ["http://192.168.204.60:9200"] //el服务器地址
37 kibana.index: ".kibana" //打开索引
96 logging.dest: /var/log/k.log //指定日志文件, 需要手动建立文件
113 i18n.locale: "zh-CN" //中文设置
[root@node1 kibana]# touch /var/log/k.log //创建文件
[root@node1 kibana]# chown kibana:kibana /var/log/k.log
启动kibana
点击查看代码
[root@node1 kibana]# systemctl start kibana.service
[root@node1 kibana]# systemctl status kibana.service
[root@node1 kibana]# ss -natp |grep 5601
LISTEN 0 128 *:5601 *:* users:(("node",pid=10604,fd=19))
访问测试
点击查看代码
浏览器访问 192.168.204.10:5601
建立索引
标签:opt,ELK,系统,kibana,elasticsearch,node1,日志,root,node6 From: https://www.cnblogs.com/leikj/p/18311510