网站首页 > 技术文章 正文
一、ELK介绍
ELK代表的是Elasticsearch,Logstash,Kibana
Elasticsearch:日志存储、搜索分析功能
Logstash:数据收集,日志收集系统
Kibana:数据可视化分析
1、Elasticsearch
(1)、简介
ElasticSearch 是一个高可用开源全文检索和分析组件。提供存储服务,搜索服务,大数据准实时分析等。一般用于提供一些提供复杂搜索的应用
(2)、主要解决解决问题
1)、检索相关数据
2)、返回统计结果
3)、速度快
(3)、工作原理
当ElasticSearch的节点启动后,它会利用多播(multicast)(或者单播,如果用户更改了配置)寻找集群中的其它节 点,并与之建立连接。
(4)、ES的基本概念
1)、近实时查询
Elasticsearch 是一个能提供近实时查询的搜索服务引擎,这意味着从索引文档到真正可搜索之间会有一个轻微的延迟(大概在一秒内)。
2)、节点和集群
节点(node)是一个运行着的 Elasticsearch 实例,你可以认为是单个服务器。集群(cluster)是一个或多个节点的集合,他们协同工作,共享数据并提供故障转移和扩展功能
3)、文档
文档是可索引信息的基本单元,以JSON表示。你可以用其来定义单个产品信息或是员工信息。我们可以把文档理 解为数据库文档中的行列数据。
4)、索引
索引是具有某些相似特征的文档的集合,它和数据库中的索引概念并不十分相同。我们可以把索引理解为数据库文 档中的数据库。
5)、类型
在索引中,我们可以定义一个或多个类型。类型是索引的逻辑类别/分区,其语义完全由开发者决定。通常,为具 有一组公共字段的文档定义类型。
6)、分片和复制
理论上,索引可以存储尽可能多的数据,但是这种情况下性能往往不太乐观,或者常见的磁盘容量限制也不能允 许。所以 Elasticsearch 提供了类似于 MongoDB 中的分片功能,该功能能将索引细分为多个分片。每个分片本身是一个功能完全和独立的“索引”,可以托管在集群中的任何节点上。
2、logstash
(1)、简介
logstash就是一根具备实时数据传输能力的管道,负责将数据信息从管道的输入端传输到管道的输出端
(2)、使用场景
logstash常用于日志系统中做日志采集设备,最常用于ELK中作为日志收集器使用
(3)、logstash作用
集中、转换和存储你的数据,是一个开源的服务器端数据处理管道,可以同时从多个数据源获取数据,并对其进行转换,然后将其发送到你最喜欢的“存储
(4)、架构
logstash的基本流程架构:input | filter | output 如需对数据进行额外处理,filter可省略。
1)、input(输入):采集各种样式,大小和相关来源数据,从各个服务器中收集数据。
2)、Filter(过滤器):用于在将event通过output发出之前对其实现某些处理功能
3)、 Output(输出):将我们过滤出的数据保存到那些数据库和相关存储中
3、kibana
(1)、简介
Kibana是针对es的ES的开源分析可视化工具,与存储在ES的数据进行交互
(2)、功能
1)、分析和可视化你的数据。搜索隐藏的见解,编制图表仪表板,仪表、地图和其他可视化显示您发现的内容,并与他人分享。
2)搜索、观察和保护你的数据。向你的应用或网站添加搜索框,分析日志,指标,并发现安全漏洞。
3)、管理、监控和保护 Elastic Stack。管理您的索引和摄入管道,监控 Elastic Stack 集群的运行状况,并控制哪些用户可以访问哪些特征和数据。
二、架构图
三、准备工作
1、关闭selinux和防火墙
[root@master ~]#sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
[root@master ~]#setenforce 0
[root@master ~]#systemctl stop firewalld
[root@master ~]#systemctl disable firewalld
[root@master ~]#systemctl status firewalld
2、配置资源参数
(1)、编辑配置文件vim /etc/sysctl.conf添加如下参数:
vm.max_map_count = 161144
(1)、编辑配置文件vim /etc/security/limits.conf添加如下参数:
* soft nofile 161144
* hard nofile 161144
(3)、使内核参数生效
sysctl -p
3、配置java环境
(1)从本地上传tomcat和jdk的软件包,且创建解压目录,并在指定目录下进行解压
[root@localhost ~]# ls
anaconda-ks.cfg jdk-8u231-linux-x64.tar.gz
[root@localhost ~]# mkdir /usr/java
[root@localhost ~]# tar -zxvf jdk-8u231-linux-x64.tar.gz -C /usr/java
(2)配置jdk系统环境变量
[root@localhost ~]# vim /etc/profile
添加如下内容:
export JAVA_HOME=/usr/java/jdk1.8.0_231
export CLASSPATH=$JAVA_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin
(3)使用source命令使profile文件中的环境变量生效
[root@localhost ~]#source /etc/profile
(4)查看java是否安装成功(若不能查看版本信息,则环境变量设置失败)
[root@localhost ~]# java -version
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)
四、ELK部署
主机 | iP | 作用 |
主机1 | 10.100.1.10 | Logstash、Kibana |
主机2 | 10.100.1.11 | Elasticsearch,Elasticsearch-head |
主机3 | 10.100.1.12 | Elasticsearch |
1、安装Elasticsearch
(1)、创建ES目录
[root@node1 ~]# mkdir /usr/local/elk
(2)、将压缩包上传到该目录下
[root@node1 ~]# cd /usr/local/elk/
[root@node1 elk]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.3.tar.gz
(3)、解压文件
[root@node1 elk]# tar -zxvf elasticsearch-6.4.3.tar.gz
(4)、创建一个普通用户,并授权,因为ES不能用root用户启动
[root@node1 elk]# useradd es
[root@node1 elk]# chown -R es:es /usr/local/elk/elasticsearch-6.4.3
(5)、切换到普通用户
[root@node1 elk]# su es
(6)、修改配置文件
[es@node1 elk]$ cd /usr/local/elk/elasticsearch-6.4.3/config/
[es@node1 config]$ vim elasticsearch.yml
cluster.name: my-application
node.name: node-1
bootstrap.memory_lock: false
network.host: 10.100.1.11
http.port: 9100
discovery.zen.ping.unicast.hosts: ["10.100.1.11", "10.100.1.12"]
cluster.name 是你的es集群的名称,如果集群式分布式要注意每节点的集群名要一样
node.name 是节点名称,可随意
network.host 0.0.0.0代表所有网络都可以访问
http.port 9200是es的默认端口
discovery.zen.ping.unicast.hosts 集群部署,只需在node1部署即可
(7)、配置完成之后,保存退出,后台运行启动ES
[es@node1 config]$ cd ../bin/
[es@node1 bin]$ ./elasticsearch &
(8)、网页访问,查看集群的UUID是否一致
2、安装elasticserch插件
插件是为了实现对elasticsearch集群的状态监控与管理配置等功能,提供elasticsearch的web界面功能
(1)、安装npm(只需要在一个节点安装即可)
[root@node1 ~]# yum install -y epel-release
[root@node1 bin]# yum install -y npm
(2)、进入到elk目录,从git仓库克隆代码到本地
[root@node1 ~]# cd /usr/local/elk
[root@node1 elk ]#git clone git://github.com/mobz/elasticsearch-head.git
(3)、进入到elasticsearch-head目录
[root@node1 elk]# cd elasticsearch-head
(4)、清理缓存
[root@node1 elasticsearch-head]# npm cache clean -f
(5)、使用npm安装n模块
[root@node1 elasticsearch-head]# npm install -g n
(6)、安装最新版本n模块
[root@node1 elasticsearch-head]# n stable
(7)、生成grunt文件
[root@node1 elasticsearch-head]# npm install grunt -save
(8)、确认生成grunt文件
[root@node1 elasticsearch-head]# ll node_modules/grun
(9)、执行安装grunt
[root@node1 elasticsearch-head]# npm install
(10)、后台启动head插件
[root@node1 elasticsearch-head]# npm run start &
(11)、验证9100端口是否监听
[root@node1 elasticsearch-head]# netstat -lntup | grep 9100
tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 21238/grunt
(12)、启动成功后,修改elasticsearch配置文件
[root@node1 elasticsearch-head]# vim /usr/local/elk/elasticsearch-6.4.3/config/elasticsearch.yml
#添加如下两行,开启跨域访问支持(添加在配置文件最后即可)
http.cors.enabled: true
http.cors.allow-origin: "*"
(13)、重启elasticsearch
(14)、打开浏览器访问:10.100.1.11:9100
3、安装logstash
(1)、创建logstash目录,并下载logstash压缩包
[root@master ~]# mkdir /usr/local/elk
[root@master ~]# cd /usr/local/elk/
[root@master elk]# wget https://artifacts.elastic.co/downloads/logstash/logstash-6.4.3.tar.gz
(2)、解压该文件
[root@master elk]# tar -zxvf logstash-6.4.3.tar.gz
(3)、测试
[root@master elk]# cd logstash-6.4.3/bin/
[root@master bin]# ./logstash -e 'input { stdin{} } output { stdout{ codec => rubydebug } }'
输入hellow
然后会输出一系列的信息
{
"@timestamp" => 2022-04-25T06:03:56.495Z,
"message" => "hellow",
"host" => "master",
"@version" => "1"
}
4、安装kibana
(1)、进入到安装目录,下载kibana
[root@master bin]# cd /usr/local/elk/
[root@master elk]# wget https://artifacts.elastic.co/downloads/kibana/kibana-6.4.3-linux-x86_64.tar.gz
(2)、解压文件
[root@master elk]# tar -zxvf kibana-6.4.3-linux-x86_64.tar.gz
(3)、修改配置文件
[root@master elk]# cd kibana-6.4.3-linux-x86_64/config/
[root@master config]# vim kibana.yml
server.port: 5601
server.host: "10.100.1.10"
elasticsearch.url: http://10.100.1.11:9200
(4)、后台启动
[root@master config]# cd ../bin/
[root@master bin]# ./kibana &
(5)、浏览器打开
五、实战
1、ELK收集本机系统日志
(1)、进入到logstash的配置文件目录
[root@master bin]# cd /usr/local/elk/logstash-6.4.3/config/
(2)、新建一个messages.conf文件
[root@master config]# vim message.conf
input{
file{
path=>"/var/log/messages"
type=>"systemlog"
start_position=>"beginning"
stat_interval=>"5"
}
}
output{
elasticsearch{
hosts=>["10.100.1.11:9200"]
index=>"systemlog-%{+YYYY.MM.dd}"
}
}
(3)、以配置文件message.conf启动logstash
[root@master bin]# cd ../bin/
[root@master bin]# ./logstash -f ../config/message.conf &
(4)、成功启动后,登录elasticsearch-head插件,查看有无插件的索引
(5)、打开kibana,创建索引
(6)、点击discover展示数据
2、ELK收集tomcat日志
在企业中,tomcat日志遇到异常(exception)一条日志可能是几行或者是十几行,所以我们需要将多行日志变成一行日志来收集
实现方法:将日志改成Json格式
(1)、创建tomcat目录,上传压缩包到该目录
[root@master ~]# mkdir /usr/local/tomcat
[root@master ~]# cd /usr/local/tomcat/
[root@master tomcat]# ls
apache-tomcat-8.5.65.tar.gz
(2)、解压该文件
[root@master tomcat]# tar -zxvf apache-tomcat-8.5.65.tar.gz
(3)、启动tomcat
[root@master tomcat]# cd apache-tomcat-8.5.65/bin/
[root@master bin]# ./startup.sh
(4)、浏览器验证
(5)、修改tomcat日志格式为json格式
[root@master bin]# cd ../conf/
[root@master conf]# vim server.xml
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="{clientip:%h,ClientUser:%l,authenticated:%u,AccessTime:%t,method:%r,status:%s,SendBytes:%b,Query?string:%q,partner:%{Referer}i,AgentVersion:%{User-Agent}i}" />
(6)、重启tomcat服务
(7)、配置logstash
[root@master conf]# cd /usr/local/elk/logstash-6.4.3/config/
[root@master config]# vim tomcat.conf
input{
file{
path=>"/usr/local/tomcat/apache-tomcat-8.5.65/logs/localhost_access_log.2022-04-25.txt"
type=>"tomcat"
start_position=>"beginning"
stat_interval=>"5"
}
}
output{
elasticsearch{
hosts=>["10.100.1.11:9200"]
index=>"tomcatlog-%{+YYYY.MM.dd}"
}
}
(8)、以配置文件tomcat.conf启动logstash
[root@master ~]# cd /usr/local/elk/logstash-6.4.3/bin/
[root@master bin]# ./logstash -f ../config/tomcat.conf &
(9)、成功启动后,登录elasticsearch-head插件,查看有无插件的索引
(10)、kibana配置该索引
3、logstash+redis收集日志
(1)、安装redis依赖,升级gcc版本
[root@node2 ~]# yum -y install centos-release-scl
[root@node2 ~]# yum -y install devtoolset-8-gcc devtoolset-8-gcc-c++ devtoolset-8-binutils
(2)、永久使用gcc8.3版本
[root@node2 ~]# echo "source /opt/rh/devtoolset-8/enable" >>/etc/profile
[root@node2 ~]# source /etc/profile
(3)、查看gcc版本
[root@node2 ~]# gcc -v
(4)、上传redis压缩包到/opt目录下
[root@node2 ~]# cd /opt/
[root@node2 opt]# ls
jdk-8u231-linux-x64.tar.gz redis-6.0.8.tar.gz rh
(5)、创建redis安装目录,将redis压缩文件解压到该目录
[root@node2 ~]# mkdir /usr/local/redis
[root@node2 opt]# tar -zxvf redis-6.0.8.tar.gz -C /usr/local/redis/
(6)、修改redis配置文件
[root@node2 opt]# cd /usr/local/redis/redis-6.0.8/
[root@node2 redis-6.0.8]# vim redis.conf
port 7000
daemonize yes
bind 10.100.1.12
protected-mode no
requirepass 123456
(7)、编译安装
[root@node2 redis-6.0.8]# make && make install
(8)、启动redis
[root@node2 redis-6.0.8]# ./src/redis-server redis.conf &
(9)、logstash收集日志输出至redis
[root@master config]# cd /usr/local/elk/logstash-6.4.3/config/
[root@master config]# vim redis.conf
input {
file {
path => "/var/log/messages"
type => "systemlog"
start_position => "beginning"
stat_interval => "2"
}
}
output {
if [type] == "systemlog" {
redis {
data_type => "list"
host => "10.100.1.12"
db => "6"
port => "7000"
password => "123456"
key => "systemlog"
}
}
}
(10)、启动logstash
[root@master bin]# ./logstash -f ../config/redis.conf &
(11)、redis查看有无日志信息
[root@node2 ~]# /usr/local/redis/redis-6.0.8/src/redis-cli -p 7000 -h 10.100.1.12
10.100.1.12:7000> auth 123456
OK
10.100.1.12:7000> select 6
OK
10.100.1.12:7000[6]> keys *
1) "systemlog"
10.100.1.12:7000[6]> llen systemlog
(integer) 11
(12)、配置logstash从redis中取出数据到elasticsearch
[root@master config]# cd /usr/local/elk/logstash-6.4.3/config/
[root@master config]# vim redis1.conf
input {
redis {
type => "systemlog"
host => "10.100.1.12"
password => '123456'
port => "7000"
db => "6"
data_type => "list"
key => "systemlog"
}
}
output {
if [type] == "systemlog" {
elasticsearch {
hosts => ["10.100.1.11:9200"]
index => "redis-systemlog-%{+YYYY.MM.dd}"
}
}
}
(13)、启动logstash
[root@master bin]# ./logstash -f ../config/redis1.conf &
(14)、查看是否有索引
(15)、kibana配置该索引
4、filebeat收集日志到elasticserch(从其他主机收集日志)
收集其他主机的nginx日志到elasticserch
(1)、安装filebeate
下载filebeate的rpm包
[root@node2 ~]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.3.2-x86_64.rpm
yum安装
[root@node2 ~]# yum localinstall -y filebeat-5.3.2-x86_64.rpm
(2)、编辑filebeate配置文件
[root@node2 ~]# cd /etc/filebeat/
[root@node2 filebeat]# vim filebeat.yml
- input_type: log
paths:
- /usr/local/nginx/logs/error.log
output.elasticsearch:
hosts: ["10.100.1.11:9200"]
(3)、启动filebeate
[root@node2 filebeat]# systemctl start filebeat
(4)、查看是否有索引
(5)、kibana配置该索引
5、filebeat收集日志到logstash(从其他主机收集日志)
收集其他主机的nginx日志到logstash,再到elasticserch
(1)、安装filebeate
下载filebeate的rpm包
[root@node2 ~]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.3.2-x86_64.rpm
yum安装
[root@node2 ~]# yum localinstall -y filebeat-5.3.2-x86_64.rpm
(2)、编辑filebeate配置文件
[root@node2 ~]# cd /etc/filebeat/
[root@node2 filebeat]# vim filebeat.yml
- input_type: log
paths:
- /usr/local/nginx/logs/access.log
output.logstash:
hosts: ["10.100.1.10:9600"]
enabled: true
(3)、启动filebeate
[root@node2 filebeat]# systemctl start filebeat
(4)、编辑logstash配置文件
[root@master ~]# cd /usr/local/elk/logstash-6.4.3/config/
[root@master config]# vim beats.conf
input {
beats {
port => 9600
}
}
output {
elasticsearch {
hosts => ["10.100.1.11:9200"]
index => "%{type}-%{+YYYY.MM.dd}"
}
}
(5)、以filebeate.conf启动logstash
[root@master bin]# ./logstash -f ../config/logstash &
(6)、查看是否有索引
(7)、kibana配置该索引
猜你喜欢
- 2024-11-17 JavaScript爆款进度条组件—NProgress.js
- 2024-11-17 2021 EHA | 急性髓系白血病治疗方案与预后因素的探索
- 2024-11-17 python txt文件截取数据处理(python如何将txt文件中的字段提取到excel中)
- 2024-11-17 手把手教你发布vue组件到npm(vue怎么发布)
- 2024-11-17 n8n:一个可扩展的工作流程自动化工具
- 2024-11-17 如何解决使用npm安装vue脚手架报错问题?20个常见解决方法汇总!
- 2024-11-17 圆锥曲线:代点法求轨迹方程(代入法求圆的轨迹方程)
- 2024-11-17 ubuntu安装最新的node(ubuntu 安装nodejs npm)
- 2024-11-17 遗传学特征对老年急性髓系白血病患者MRD和移植结局的影响
- 2024-11-17 yarn更换为淘宝镜像(npm改淘宝镜像)
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)