优秀的编程知识分享平台

网站首页 > 技术文章 正文

ELK架构部署以及应用(elk环境搭建以及部署)

nanyue 2024-11-17 00:17:32 技术文章 1 ℃

一、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配置该索引


Tags:

最近发表
标签列表