(17)ELK大型储存库的搭建

前言:

els是大型数据储存体系,类似于一种分片式存储方式。elasticsearch有强大的查询功能,基于java开发的工具,结合logstash收集工具,收集数据。kibana图形化展示数据,可以很好在大量的消息中准确的找到符合条件,人们想知道的信息。并且支持多种数据类型。

实验环境:

关掉selinux和防火墙,做时间同步

192.168.121.30 vm2.cluster.com elasticsearch

192.168.121.40 vm1.cluster.com logstash

192.168.121.50 vm3.cluster.com kibana

一、elasticsearch的安装

地址:https://www.elastic.co/cn/downloads

找到资源,下载,对应Linux的版本就行了

root@vm2 \~# vim /etc/hosts

写入三行数据

192.168.121.30 vm2.cluster.com elasticsearch

192.168.121.40 vm1.cluster.com logstash

192.168.121.50 vm3.cluster.com kibana

#scp /etc/hosts root@192.168.121.40:/etc/hosts

#scp /etc/hosts root@192.168.121.50:/etc/hosts 远程传到对应主机

hostnamectl hostname vm2.cluster.com

yum -y install lrzsz tar net-tools wget chrony

#timedatectl时间同步

yum -y install java-1.8.0*

安装java,基于es是java开发

root@vm2 \~# java -version

openjdk version "1.8.0_422" 查看版本,是否下载

root@vm2 \~# rpm -ivh elasticsearch-6.5.2.rpm 安装es

root@vm2 \~# vim /etc/elasticsearch/elasticsearch.yml

定义集合的名字,打开9200端口,监听所有ip,所有主机,更改三个地方

cluster.name: elk-cluster 可以自定义一个集群名称,不配置的话默认会取名为elasticsearch

path.data: /var/lib/elasticsearch

path.logs: /var/log/elasticsearch

network.host:0.0.0.0打开注释,并修改为监听所有

http.port: 9200 打开注释,监听端口9200

root@vm2 \~# systemctl restart elasticsearch.service 重启服务

root@vm2 \~# systemctl enable elasticsearch.service

root@vm2 \~# ss -anlt

State Recv-Q Send-Q Local Address:Port Peer Address:Port Process

LISTEN 0 128 0.0.0.0:22 0.0.0.0:*

LISTEN 0 4096 *:9200 *:*

LISTEN 0 128 :::22 :::*

LISTEN 0 4096 *:9300 *:* 查看9200,9300端口启用,9200是数据传输,访问的端口,9300是集群的端口。

root@vm2 \~# curl http://192.168.121.30:9200/_cluster/health?pretty

查看到集群的名字为elk-cluster,只要一个节点

二、设置节点2,192.168.121.40为第二个节点,组成集群

yum -y install lrzsz tar net-tools wget chrony

yum -y install java-1.8.0*

hostnamectl hostname vm1.cluster.com

root@vm1 \~# java -version

openjdk version "1.8.0_422"

root@vm1 \~# vim /etc/elasticsearch/elasticsearch.yml 设置节点2,不为主节点

/cluster.name: elk-cluster

/node.name: 192.168.21.40本机IP或主机名

node.master: false 指定不为master节点,这一行写道node.name下面

path.data: /var/lib/elasticsearch

path.logs: /var/log/elasticsearch

/network.host: 0.0.0.0

/http.port: 9200 开启,去掉前面的#注释

/discovery.zen.ping.unicast.hosts: "**192.168.121.30** ", "**192.168.121.40**"

填写两个节点的ip

root@vm2 \~# vim /etc/elasticsearch/elasticsearch.yml

cluster.name: elk-cluster

node.name: 192.168.121.30 本机IP或主机名

node.master: true 指定为master节点

path.data: /var/lib/elasticsearch

path.logs: /var/log/elasticsearch

network.host: 0.0.0.0

http.port: 9200

discovery.zen.ping.unicast.hosts: "192.168.121.30", "192.168.121.40"

vm添加主节点,192.168.121.30为主

root@vm1 \~# systemctl restart elasticsearch.service //重启服务

root@vm1 \~# systemctl enable elasticsearch.service

root@vm2 \~# systemctl restart elasticsearch.service

root@vm2 \~# ss -anlt 查看9200和9300端口启用

root@vm2 \~# curl http://192.168.121.30:9200/_cluster/health?pretty

查看有两个节点

三、es集合的基本参数查询

索引是一个

Node(节点):运行单个ES实例的服务器

Cluster(集群):一个或多个节点构成集群

Index(索引):索引是多个文档的集合

Type(类型):一个Index可以定义一种或多种类型,将Document逻辑分组

Document(文档):Index里每条记录称为Document,若干文档构建一个Index

Field(字段):ES存储的最小单元

Shards(分片):ES将Index分为若干份,每一份就是一个分片 Replicas(副本):Index的一份或多份副本

root@vm2 \~# curl http://192.168.121.30:9200/_cat/nodes?v

在主机和网页都是可以查询的,主机前面加一个curl就行了。那是linux访问网站的命令

root@vm2 \~# curl -X PUT http://192.168.121.30:9200/nginx_access 上传索引nginx_access

root@vm2 \~# curl http://192.168.121.30:9200/_cat/indices?v 查看索引,只要一个

root@vm2 \~# curl -X DELETE http://192.168.121.30:9200/nginx_access 删除索引

索引类似于目录,更好的查询。

上传一个写有一千条数据的json文件,关于bank银行人员的,方便查询

root@vm2 \~# curl -H "Content-Type: application/json" -XPOST "192.168.121.30:9200/bank/_doc/_bulk?pretty&refresh" --data-binary "@accounts.json"

导入后,查看索引,有一个bank的索引

root@vm2 \~# curl -X GET "192.168.121.30:9200/bank/_search?pretty" -H 'Content-Type: application/json' -d '

{

"query": {"match_all": {} }

}

'

默认查询十条

root@vm2 \~# curl -X GET "192.168.121.30:9200/bank/_search?pretty" -H 'Content-Type:application/json' -d'

{

"query": { "match_all": {} },

"from": 0

> ,

> "size": 2

> }

> '

查看两条数据

查看500到509的十条记录

root@vm2 \~# curl -X GET "192.168.121.30:9200/bank/_search?pretty" -H 'Content-Type:application/json' -d'

{

"query": { "match_all": {} },

"from": 500,

"size": 10,

"sort": [

{ "account_number": "asc" }

]

}

' 2>/dev/null

四、安装elasticsearch-head,可视化管理数据和查看参数

安装es-head需要先安装nodejs

网上找对应安装包就行了

root@vm2 \~# tar -xf node-v10.24.1-linux-x64.tar.xz -C /usr/local/

root@vm2 \~# cd /usr/local/

root@vm2 local# mv node-v10.24.1-linux-x64/ nodejs

root@vm2 local# ln -s /usr/local/nodejs/bin/npm /bin/npm

root@vm2 local# ln -s /usr/local/nodejs//bin/node /bin/node

创建软连接,使系统能使用npm命令和node命令

root@vm2 local# cd

root@vm2 \~# yum -y install unzip

root@vm2 \~# unzip elasticsearch-head-master.zip 解压zip文件,使用unzip命令

root@vm2 \~# cd elasticsearch-head-master/

先使用npm安装grunt

到head目录下安装对应工具

root@vm2 elasticsearch-head-master# npm install -g grunt-cli --registry=http://registry.npm.taobao.org //后面接一个淘宝的仓库,下载更快

root@vm2 elasticsearch-head-master# npm install phantomjs-prebuilt@2.1.16 --ignore-script --registry=http://registry.npm.taobao.org

安装npm的时候报错了,安装这个

root@vm2 elasticsearch-head-master# npm install --registry=http://registry.npm.taobao.org

安装完成,没有报错就行,有报错就要解决了

root@vm2 elasticsearch-head-master# nohup npm run start & //在head目录下,后台启动npm

root@vm2 \~# ss -anlt //查看9100端口启用

root@vm2 \~# vim /etc/elasticsearch/elasticsearch.yml //两个节点都添加连接

http.cors.enabled: true后重启es服务

http.cors.allow-origin: "*"

root@vm2 \~# systemctl restart elasticsearch.service

root@vm1 \~# vim /etc/elasticsearch/elasticsearch.yml

http.cors.enabled: true

http.cors.allow-origin: "*"

root@vm1 \~# systemctl restart elasticsearch.service

刷新网页,填写192.168.121.30的ip连接

40和30的IP都是一模一样的内容,都有bank索引,内容和数据

可以删除,操作相关内容

输入删除两个字就删除了,这里不删除,只是演示一下

不要更改/etc/hosts文件,能ping通192.168.121.30,和192.168.121.40就行了

一千多条数据,查询很快,这也是es的功能之一

五、安装logstash,结合es使用

logstash可以采集任何格式的数据,当然我们这里主要是讨论采集系统日志,服务日志等日志类型数据。主要是收集日志文件。

官方产品介绍:https://www.elastic.co/cn/products/logstash

input插件: 用于导入日志源 (配置必须)

https://www.elastic.co/guide/en/logstash/current/input-plugins.html

filter插件: 用于过滤(不是配置必须的)

output插件: 用于导出(配置必须)

在vm3.cluster.com上,IP为192.168.121.50

root@vm3 \~# yum -y install java-1.8.0*

root@vm3 \~# java -version

openjdk version "1.8.0_422"

path.data: /var/lib/logstash

path.config: /etc/logstash/conf.d/ 打开注释,并加上配置目录路径

http.host: "192.168.121.50" //本地的IP地址

http.port:9600-9700 打开端口

root@vm3 bin# cd /usr/share/logstash/bin/

root@vm3 bin# ./logstash -e 'input {stdin {}} output {stdout {}}' 运行,看到端口9600和sucess就表示运行成功了,ctrl+c结束

回车自定义输出

hi

不要更etc/hosts文件,能ping通192.168.121.30和192.168.121.40就行了

root@vm3 bin# vim /etc/logstash/conf.d/test.conf

input{

file {

path => "/var/log/messages"

start_position => "beginning"

}

}

output {

elasticsearch{

hosts => "192.168.121.30:9200"

index => "test-%{+YYYY.MM.dd}"

}

}

#cd /usr/share/logstash/bin

root@vm3 bin# ./logstash --path.settings /etc/logstash/ -r -f /etc/logstash/conf.d/test.conf &

后台启用

root@vm3 bin# ps -ef | grep java | grep -v grep

root 1750 1132 9 11:07 pts/0

root@vm3 bin# kill -9 1750 杀死进程

在/usr/share/logstash/bin执行logstash命令

root@vm3 bin# ./logstash --path.settings /etc/logstash/ -r -f /etc/logstash/conf.d/test.conf &

刷新es的网页,可以看到添加的

六、安装kibana

找到对应的版本6.5的,对应前面的es版本和logstash版本

root@vm1 \~# rpm -ivh kibana-6.5.2-x86_64.rpm

root@vm1 \~# vim /etc/kibana/kibana.yml

改四个地方

/server.port: 5601

/server.host: "0.0.0.0"

/elasticsearch.url: "http://192.168.121.30:9200"

/logging.dest: /var/log/kibana.log

root@vm1 log# cat /etc/kibana/kibana.yml |grep -v "#"

root@vm1 \~# cd /var/log/

root@vm1 log# touch kibana.log

root@vm1 log# chown kibana.kibana kibana.log

root@vm1 log# systemctl restart kibana.service

root@vm1 log# systemctl enable kibana.service

网页访问192.168.121.30:5601

系统监控,不知道英文的看图标,好吧

查看节点

多出来三个索引,是kibana的

添加yum*和bank*

扩展:

filebeat工具安装在vm1,vm2和vm3上面,收集数据给logstash,更高效更快速,最重要是节省logstash的资源,filebeat使用go语言编写,简单占用内存少。

大概步骤与上面一致,开启端口,改ip.

相关推荐
未若君雅裁1 小时前
日志采集与ELK:从本地日志到集中检索分析
运维·elk·jenkins
_codemonster7 小时前
Prometheus + Grafana + Alertmanager和ELK 栈(Elasticsearch + Logstash + Kibana)
elk·grafana·prometheus
Sean‘1 天前
在隔离内网机器上使用 Filebeat 全量采集日志并推送到 ELK 的实战
运维·服务器·elk
Michaelwubo4 天前
ELK案例
elk
YDS8295 天前
DeepSeek RAG&MCP + Agent智能体项目 —— 集成ELK日志管理系统和Prometheus监控系统
java·elk·ai·springboot·agent·prometheus·deepseek
爱吃龙利鱼7 天前
docker-compose一键部署ELK+Filbeat
elk·docker
小旭95279 天前
Spring Cloud 集成分布式日志 ELK+Swagger 接口文档实战
java·分布式·后端·elk·spring cloud
绝知此事13 天前
ELK 从入门到精通:Spring Boot 实战三部曲(三)—— 高级应用与架构设计
spring boot·后端·elk
绝知此事14 天前
ELK 从入门到精通:Spring Boot 实战三部曲(二)—— 进阶特性与性能优化
spring boot·elk·性能优化
绝知此事14 天前
ELK 从入门到精通:Spring Boot 实战三部曲(一)—— 基础核心与快速上手
spring boot·后端·elk