赞
踩
目录
ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana
1、Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。
它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
2、Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。
一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
3、Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
4、FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。
日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。
往往单台机器的日志我们使用grep、awk等工具就能基本实现简单分析,但是当日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用 grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。
一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。
收集:能够采集多种来源的日志数据
传输:能够稳定的把日志数据解析过滤并传输到存储系统
存储:存储日志数据
分析:支持 UI 分析
警告:能够提供错误报告,监控机制
(1)在所有需要收集日志的服务器上部署Logstash;或者先将日志进行集中化管理在日志服务器上,在日志服务器上部署 Logstash。
(2)Logstash 收集日志,将日志格式化并输出到 Elasticsearch 群集中。
(3)Elasticsearch 对格式化后的数据进行索引和存储。
(4)Kibana 从 ES 群集中查询数据生成图表,并进行前端数据的展示。
实验准备
node1节点(2C/4G):node1/192.168.112.97 Elasticsearch
node2节点(2C/4G):node2/192.168.112.99 Elasticsearch
Apache节点:apache/192.168.112.100 Logstash Kibana Apache
节点1、节点2java环境均为1.8.0
在节点1和节点2上同时操作
部署 Elasticsearch 软件
- 安装elasticsearch—rpm包
- #上传elasticsearch-6.7.2.rpm到/opt目录下
- cd /opt
- rpm -ivh elasticsearch-6.7.2.rpm
修改配置文件
- 修改elasticsearch主配置文件
- cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
- vim /etc/elasticsearch/elasticsearch.yml
- --17--取消注释,指定集群名字
- cluster.name: my-elk-cluster
- --23--取消注释,指定节点名字:Node1节点为node1,Node2节点为node2
- node.name: node1
- node.master: true #是否master节点,false为否
- node.data: true #是否数据节点,false为否
- --33--取消注释,指定数据存放路径
- path.data: /var/lib/elasticsearch
- --37--取消注释,指定日志存放路径
- path.logs: /var/log/elasticsearch
- --43--取消注释,避免es使用swap交换分区
- bootstrap.memory_lock: true
- --55--取消注释,设置监听地址,0.0.0.0代表所有地址
- network.host: 0.0.0.0
- --59--取消注释,ES 服务的默认监听端口为9200
- http.port: 9200 #指定es集群提供外部访问的接口
- transport.tcp.port: 9300 #指定es集群内部通信接口
- --68--取消注释,集群发现通过单播实现,指定要发现的节点
- discovery.zen.ping.unicast.hosts: ["192.168.112.97:9300", "192.168.112.99:9300"]
使用grep命令查看已经配置的选项
grep -v "^#" /etc/elasticsearch/elasticsearch.yml
修改一个进程可以拥有的最大内存映射区域数
- vm.max_map_count=262144
-
- sysctl -p
- sysctl -a | grep vm.max_map_count
启动elasticsearch
节点2
节点2
查看节点信息
通过浏览器访问节点1和节点2的9200端口,查看详细情况
查看集群的健康状况
使用上述的方法查看,对我们来说并不友好。我们可以安装插件来更方便地管理群集。
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
- yum install gcc gcc-c++ make -y
-
- cd /opt
- tar zxvf node-v8.2.1.tar.gz
-
- cd node-v8.2.1/
- ./configure
- make && make install
-
- 安装 phantomjs
- #上传软件包 phantomjs-2.1.1-linux-x86_64.tar.bz2 到
- 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 数据可视化工具
- #上传软件包 elasticsearch-head.tar.gz 到/opt
- cd /opt
- tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/
- cd /usr/local/src/elasticsearch-head/
- npm install
-
- 修改 Elasticsearch 主配置文件
- vim /etc/elasticsearch/elasticsearch.yml
- ......
- --末尾添加以下内容--
- http.cors.enabled: true #开启跨域访问支持,默认为 false
- http.cors.allow-origin: "*" #指定跨域访问允许的域名地址为所有
-
- systemctl restart elasticsearch
-
- 启动 elasticsearch-head 服务
- #必须在解压后的 elasticsearch-head 目录下启动服务,进程会读取该目录下的 gruntfile.js 文件,否则可能启动失败。
- cd /usr/local/src/elasticsearch-head/
- npm run start &
启动完成后,可以通过浏览器访问节点地址的9100端口来查看集群详细信息
- 插入索引
- #通过命令插入一个测试索引,索引为 index-demo,类型为 test。
- curl -X PUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
通过网页浏览
查看数据浏览
Logstash 一般部署在需要监控其日志的服务器。在本案例中,Logstash 部署在 Apache 服务器上,用于收集 Apache 服务器的日志信息并发送到 Elasticsearch。
- 1.更改主机名
- hostnamectl set-hostname apache
-
- 2.安装Apahce服务(httpd)
- yum -y install httpd
- systemctl start httpd
-
- 3.安装Java环境
- yum -y install java
- java -version
-
- 4.安装logstash
- #上传软件包 logstash-5.5.1.rpm 到/opt目录下
- 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/
-
- 5.测试 Logstash
- Logstash 命令常用选项:
- -f:通过这个选项可以指定 Logstash 的配置文件,根据配置文件配置 Logstash 的输入和输出流。
- -e:从命令行中获取,输入、输出后面跟着字符串,该字符串可以被当作 Logstash 的配置(如果是空,则默认使用 stdin 作为输入,stdout 作为输出)。
- -t:测试配置文件是否正确,然后退出。
- 定义输入和输出流:
- #输入采用标准输入,输出采用标准输出(类似管道)
- logstash -e 'input { stdin{} } output { stdout{} }'
- ......
- www.baidu.com #键入内容(标准输入)
- 2020-12-22T03:58:47.799Z node1 www.baidu.com #输出结果(标准输出)
- www.sina.com.cn #键入内容(标准输入)
- 2017-12-22T03:59:02.908Z node1 www.sina.com.cn #输出结果(标准输出)
我们可以使用另外一种更直观的显示方式
- logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
- ......
- www.baidu.com #键入内容(标准输入)
- {
- "@timestamp" => 2020-12-22T02:15:39.136Z, #输出结果(处理后的结果)
- "@version" => "1",
- "host" => "apache",
- "message" => "www.baidu.com"
- }
我们可以把以上信息写入到elasticsearch中
- 使用 Logstash 将信息写入 Elasticsearch 中
- logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.80.10:9200"] } }'
我们到elasticsearch页面查看一下
到数据浏览查看
定义 logstash配置文件
- Logstash 配置文件基本由三部分组成:input、output 以及 filter(可选,根据需要选择使用)。
- input:表示从数据源采集数据,常见的数据源如Kafka、日志文件等
- filter:表示数据处理层,包括对数据进行格式化处理、数据类型转换、数据过滤等,支持正则表达式
- output:表示将Logstash收集的数据经由过滤器处理之后输出到Elasticsearch。
-
- chmod +r /var/log/messages #让 Logstash 可以读取日志
-
- vim /etc/logstash/conf.d/system.conf
- input {
- file{
- path =>"/var/log/messages" #指定要收集的日志的位置
- type =>"system" #自定义日志类型标识
- start_position =>"beginning" #表示从开始处收集
- }
- }
- output {
- elasticsearch { #输出到 elasticsearch
- hosts => ["192.168.112.97:9200","192.168.112.99:9200"] #指定 elasticsearch 服务器的地址和端口
- index =>"system-%{+YYYY.MM.dd}" #指定输出到 elasticsearch 的索引格式
- }
- }
-
- systemctl restart logstash
- 1.安装 Kiabana
- #上传软件包 kibana-5.5.1-x86_64.rpm 到/opt目录
- cd /opt
- rpm -ivh kibana-5.5.1-x86_64.rpm
-
- 2.设置 Kibana 的主配置文件
- vim /etc/kibana/kibana.yml
- --2--取消注释,Kiabana 服务的默认监听端口为5601
- server.port: 5601
- --7--取消注释,设置 Kiabana 的监听地址,0.0.0.0代表所有地址
- server.host: "0.0.0.0"
- --28--取消注释,配置es服务器的ip,如果是集群则配置该集群中master节点的ip
- elasticsearch.url: ["http://192.168.112.97:9200","http://192.168.112.99:9200"]
- --37--取消注释,设置在 elasticsearch 中添加.kibana索引
- kibana.index: ".kibana"
- --96--取消注释,配置kibana的日志文件路径(需手动创建),不然默认是messages里记录日志
- logging.dest: /var/log/kibana.log
-
- 3.创建日志文件,启动 Kibana 服务
- touch /var/log/kibana.log
- chown kibana:kibana /var/log/kibana.log
-
- systemctl start kibana.service
- systemctl enable kibana.service
-
- netstat -natp | grep 5601
浏览器访问 节点1的5601端口
登录之后,创建一个默认索引
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。