Elastic stack 技术栈学习(二)—— Linux(Centos系统) 搭建日志采集服务器ELK

一、前言

借鉴https://blog.csdn.net/ghwzjz/article/details/115935321

1.目的

采集Windows系统上的日志。
日志都分散在各个生产服务器,且开发人员无法登陆生产服务器,这时候就需要一个集中式的日志收集装置,对日志中的关键字进行监控,触发异常时进行报警,并且开发人员能够查看相关日志

2.ELK

ELK 是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Logstash 和 Kibana。
Elasticsearch 是一个搜索和分析引擎。
Logstash 是服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到诸如 Elasticsearch 等存储库中。
Kibana 则可以让用户在 Elasticsearch 中使用图形和图表对数据进行可视化。

3.系统

Centos 7虚拟机+win10虚拟机

二、步骤

1.安装win10操作系统

因为之前安装过centos7.5了,所以这次只需要安装一个win10。
依然按照 “硬件配置->载入镜像->安装系统” 这个顺序去安装win10虚拟机。
我选择的家庭版,让我输入秘钥,就在网上随便搜了一个。
在这里插入图片描述
但是出现了虚拟机和页面大小不一样的情况
在这里插入图片描述
直接在设置里调整分辨率,选一个比现在大的合适的就行。

PS: 我发现,不需要调整IP就能连网
在这里插入图片描述
因为在以前我已经设置过虚拟机的网络连接方式了,当时选的是NAT。
https://blog.csdn.net/qq_44886213/article/details/121051103?spm=1001.2014.3001.5501,通过上面这篇文章中对虚拟网段的设置,VM Vare里的所有虚拟计算机都默认连入192.168.10.xx这个虚拟网段,而且默认是动态分配的IP(在上面的文章中因为要搭建Hadoop集群,给他手动改成静态分配IP了)。
我们用ipconfig命令查看一下,
在这里插入图片描述
给这台win10虚拟机动态分配的IP地址是:192.168.10.129。OK,网络的事情先到这里。

打开此电脑以后,C盘存的操作系统,但是D盘是不可读写的,需要格式化:双击D盘就会提醒你怎样格式化。
在这里插入图片描述

2. 下载压缩包并上传

需要下面4个压缩包

jdk1.8.0_131.tar.gz
elasticsearch-7.15.1-linux-x86_64.tar.gz
kibana-7.15.1-linux-x86_64.tar.gz
winlogbeat-7.15.1-windows-x86_64.zip

1)jdk下载链接:https://www.oracle.com/java/technologies/downloads/#java8
在这里插入图片描述
需要账号密码,感谢这个博主https://blog.csdn.net/qq_40579464/article/details/105667259

账号:756309186@qq.com
密码:zZ5241248

2)后3个压缩包是免费下载的:https://www.elastic.co/cn/elastic-stack/

————————————————————————————————————————————

其中,下面这3个压缩包

jdk1.8.0_131.tar.gz
elasticsearch-7.15.1-linux-x86_64.tar.gz
kibana-7.15.1-linux-x86_64.tar.gz

需要上传到centos服务器上,下面这个压缩包

winlogbeat-7.15.1-windows-x86_64.zip

需要上传到win10客户端上

1)上传到服务器

要把3个安装包上传到/opt路径下,路径如下图
在这里插入图片描述
我用的pscp.exe这个程序给Linux系统传文件,具体用法见这一篇博文

C:\Users\DELL>pscp F:\elasticsearch-7.15.1-linux-x86_64.tar.gz root@192.168.10.100:/opt
root@192.168.10.100 password:
elasticsearch-7.15.1-linu | 332861 kB | 22190.8 kB/s | ETA: 00:00:00 | 100%

C:\Users\DELL>pscp F:\kibana-7.15.1-linux-x86_64.tar.gz root@192.168.10.100:/opt
root@192.168.10.100 password:
kibana-7.15.1-linux-x86_6 | 277101 kB | 13195.3 kB/s | ETA: 00:00:00 | 100%

C:\Users\DELL>pscp F:\jdk-8u311-linux-x64.tar.gz root@192.168.10.100:/opt
root@192.168.10.100's password:
jdk-8u311-linux-x64.tar.g | 143359 kB | 11027.6 kB/s | ETA: 00:00:00 | 100%
2)上传到客户端

这里还不知道怎样给win10虚拟机传文件。那么下面要思考的就是,无法借助像pscp.exe这样的工具,怎样将本地的文件传到win10虚拟机上去呢?
看了很多方法,比如创建共享文件夹、安装VM Vare tools。嘿嘿,不过人生苦短,我用email。直接以邮件附件的形式发给自己,然后在虚拟机上下载下来就好啦。
在这里插入图片描述

3. 部署JDK

首先进入/opt目录然后做如下操作

[root@localhost /]# tar zxvf jdk-8u311-linux-x64.tar.gz

解压以后生成下图中jdk1.8.0_311这个文件夹,然后用rm命令删掉原来的压缩包就行
在这里插入图片描述

[root@localhost /]# mv jdk1.8.0_311 /usr/
[root@localhost /]# vim /etc/profile

在profile的后面添加三行

export JAVA_HOME=/usr/jdk1.8.0_311/
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin

source命令重启配置文件,然后检测是否按好jdk8

[root@localhost /]# source /etc/profile
[root@localhost /]#  java –version

在这里插入图片描述

4.关闭selinux

selinux在Linux系统中负责执行最小权限原则,给每个进程只分配能访问到的最少的资源,保护系统的安全性。
1)法(一):临时关闭selinux:
获取当前selinux状态 getenforce Enforcing为开启,Permissive为关闭
在这里插入图片描述在这里插入图片描述
2)法(二):永久关闭
永久关闭selinux:vim /etc/sysconfig/selinux
SELINUX=enforcing 替换为SELINUX=disabled
在这里插入图片描述
reboot命令重启系统,运行命令sestatus(永久关闭才能看到disabled)

在这里插入图片描述

5. 部署Elasticsearch

5.1 部署过程

1)解压压缩包elasticsearch-5.3.0.tar.gz,将解压后的文件夹移动到/usr/local/elasticsearch这个路径,用ll命令先看一下,此时所有文件的权限都是root的

[root@localhost /]# tar xzf elasticsearch-5.3.0.tar.gz
[root@localhost /]# mv elasticsearch-5.3.0 /usr/local/elasticsearch
[root@localhost /]#  ll /usr/local/elasticsearch/

2) 创建新用户elk,并给elk授权,再用ll命令查看一下

[root@localhost /]#  useradd  elk     创建用户
[root@localhost /]#  chown -R elk /usr/local/elasticsearch/
[root@localhost /]#  ll /usr/local/elasticsearch/

3)更改安全配置limits.conf文件,

[root@localhost /]# vim  /etc/security/limits.conf

在文档的最后加上两行

  • soft nofile 65536
  • hard nofile 65536

4)更改配置文件20-nproc.conf

 [root@localhost /]# vim /etc/security/limits.d/20-nproc.conf

在最后加上一行

soft  nproc  2048

5)更改配置文件sysctl.conf

root@localhost /]# vi /etc/sysctl.conf

在最后加上一行

vm.max_map_count=655360

6)用下面命令查看一下

[root@localhost /]# sysctl –p

在这里插入图片描述
7)修改文件

[root@localhost config]# vim elasticsearch.yml

① 修改监听的网络地址为0.0.0.0

在这里插入图片描述
②开启监听的端口
在这里插入图片描述
③ data,用于存放索引分片数据文件,logs,用于存放日志
在文件里修改这两个路径

然后回到命令行,创建data和logs两个文件夹
在这里插入图片描述
文件夹创建好后,执行chown命令,给elk这两个文件夹的权限

[root@localhost elasticsearch]# chown -R elk data
[root@localhost elasticsearch]# chown -R elk logs

可以再用ll命令查看一下赋权成功没有
8)启动elasticsearch
这里有一点不懂的是,只有elk用户才能启动elasticsearch,我用root反而启动不了。
在这里插入图片描述

[root@localhost /]# su - elk       进入elk用户启动
[elk@localhost ~]$ /usr/local/elasticsearch/bin/elasticsearch -d    启动
[elk@localhost ~]$ tail -fn 50 /usr/local/elasticsearch/logs/elasticsearch.log

这里出现了jdk版本不匹配的一个warning,先不去管这个warning。
运行的时候报出了一个error:
看提示可知:缺少默认配置,至少需要配置discovery.seed_hosts/discovery.seed_providers/cluster.initial_master_nodes中的一个参数.

  • discovery.seed_hosts: 集群主机列表
  • discovery.seed_providers: 基于配置文件配置集群主机列表
  • cluster.initial_master_nodes: 启动时初始化的参与选主的node,生产环境必填

在这里插入图片描述
解决方法:
换回root登录,修改配置文件elasticsearch.yml

vim /usr/local/elasticsearch/config/elasticsearch.yml

需要做两件事:
① 释放下面这一行的注释(把#去掉就行了)

# node.name: node-1

② 释放下面这一行的注释,并且删掉node-2

# cluster.initial_master_nodes: ["node-1","node-2"]

改为

cluster.initial_master_nodes: ["node-1"]

然后再切换回elk用户运行./elasticsearch程序,就没有error只剩下jdk那个warning了。

5.2 测试es

浏览器中输入:http://IP:9200测试是否正常(出现以下文本为正常,不正常的话会提醒你连接失败)
前提:开启了elasticsearch
在这里插入图片描述
还有一个测试方法,就是开启了elasticsearch以后,改为root用户(因为只有root才能查看开放了什么端口),查看是否在监听9200端口

[root@]# netstat -ntlp|grep -E "9200|9300"

如果某一次发现服务自己关闭了,不要慌,可能是破虚拟机的内存不够了。

5.3 监控集群状态

用如下命令监控集群状态,状态以JSON的格式给出。

curl http://localhost:9200/_cluster/health?pretty=true

在这里插入图片描述
举例:

  • status:等于green(绿色)就是运行在正常,等于yellow(黄色)表示副本分片丢失,red(红色)表示主分片丢失
  • number_of_nodes:集群结点个数

6.部署Kibana

PS:
时间太久了,忘记部署elasticsearch时候新建用户elk的密码了,还好还记得root的密码。只能先登录root,然后无密进入elk了。
在这里插入图片描述

6.1修改配置文件kibana.yml,在配置文件中进行3处设置。

[root@localhost /]# tar xzf kibana-5.3.0-linux-x86_64.tar.gz
[root@localhost /]# mv kibana-5.3.0-linux-x86_64 /usr/local/kibana
[root@localhost /]#  cd /usr/local/kibana/config/
[root@localhost config]# vim kibana.yml

修改监听的网络地址为0.0.0.0
在这里插入图片描述
加入elasticsearch的url,删掉前面的#。(因为把elasticsearch和kibana都放在一台机器上,所以localhost就行)
在这里插入图片描述
开启监听的端口,删掉前面的#。
在这里插入图片描述

6.2 启动

[root@localhost config]# cd ..
[root@localhost kibana]# cd bin/  进入bin目录
[root@localhost bin]#  nohup ./kibana &      后台启动
[root@localhost bin]# netstat -tnlp|grep -E "9200|9300|5601"

这次不需要切换到ELK用户运行
在这里插入图片描述

6.3 测试

网址:http://localhost:5601
别忘了要同时开启elasticsearch
环回测试的时候(这个时候忽然明白了计网课本上把127.0.0.1称为环回测试地址的意义了,就是自己既作为服务器,又作为客户端,测试请求是否顺利),连接失败。
在这里插入图片描述
再用netstat命令查看开启的服务,发现5601服务并没有开启

netstat -tnlp | grep -E "9200|9300|5601"

在这里插入图片描述
再次尝试运行,然后用jobs命令查看,发现kibana运行后立即退出了。
在这里插入图片描述
看了其他博客以后,发现可能是内存的原因。https://blog.csdn.net/qq_36743888/article/details/109713741

这里不是内存的问题。当然内存不够也是任务关闭的原因之一,只不过这里不是
我学习docker的时候知道的:当一个后台任务没事可干的时候,它自己会退出。操作系统就是这样设计的,让没事可干的别占用内存了,腾出地方给其他有用的进程。

但是这个时候,我并没有着急修改内存。运行./kibana的时候不是用的nohup命令让他在后台挂起的方式运行,然后失败了吗。我试了一下,不用挂起,而是直接运行。

[root@hadoop100 bin]# ./kibana
Kibana should not be run as root.  Use --allow-root to continue.

提示不能用root运行,应该需要给elk授权然后让elk运行,非要用root的话,在后面加一个:

[root@hadoop100 bin]# ./kibana --allow-root

要等好久(1分钟?),才会出现最后一句“Kibana is now available”
在这里插入图片描述
这个时候用netstat查看,开启服务了
在这里插入图片描述
用浏览器进行测试:http://localhost:5601
在这里插入图片描述

6.4 kibana的简单使用

https://blog.csdn.net/qq_44886213/article/details/122484928

7.部署winlogbeat客户端

在前面,我们已经把安装包上传到虚拟机里去了

7.1 解压到C:\Program Files

文件夹改名为winlogbeat
在这里插入图片描述

7.2 安装服务

目的:把winlogbeat加入Windows系统服务中,让电脑开机的时候自动开启winlogbeat服务。

以管理员的身份打开powershell
在这里插入图片描述
运行下面的命令:

C:\Users\Administrator> cd 'C:\Program Files\Winlogbeat'
C:\Program Files\Winlogbeat> .\install-service-winlogbeat.ps1

因为是在给操作系统安装服务,这种操作很危险,默认是不允许的。所以要为当前会话设置执行策略以允许脚本运行。

PowerShell.exe -ExecutionPolicy UnRestricted -File .\install-service-winlogbeat.ps1

在这里插入图片描述
安装好后,就可以在系统“服务”中看到winlogbeat了:
在这里插入图片描述

7.3 然后启动服务

在这里插入图片描述

7.4 修改winlogbeat.yml配置文件

用winlogbeat收集日志,发送到ealsticsearch。
如果我没理解错的话,每一个安装winlogbeat服务的机器都是下图中的一个shiper。
在这里插入图片描述
1)修改name和tags(这个tags应该是用来区分这一台机器是哪一个shipper)
用ipconfig命令查看IP和mac。
在这里插入图片描述
不知道为什么用ipconfig命令看不到MAC地址,下面是查看本机MAC地址的另一种方法
在这里插入图片描述
2)填写要输出到的elasticsearch地址
把原来的“localhost”改成部署了elasticsearch服务的机器的IP地址。
在这里插入图片描述
3)这里是要采集的日志类型,默认已设置好,无需修改
在这里插入图片描述

7.5 重启服务

在这里插入图片描述
至此winlogbeat的工作完成了

8. elastic stack 测试(ELK测试)

得同时开win10和centos两个虚拟机。我的电脑做不到。

如果你想在虚拟机里测试winlogbeat->es->kibana能不能顺利工作,可以借鉴这一篇
https://blog.csdn.net/ghwzjz/article/details/115935321

我后来改为在Windows系统搭建了。
https://blog.csdn.net/qq_44886213/article/details/122147439

四、学习到的内容

1.nohup命令

nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。

nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。
以下命令在后台执行 root 目录下的 runoob.sh 脚本:

nohup /root/runoob.sh &

在终端如果看到以下输出说明运行成功:

appending output to nohup.out

如果要停止运行,你需要使用以下命令查找到 nohup 运行脚本到 PID,然后使用 kill 命令来删除:

ps -aux | grep "runoob.sh" 
kill -9 PID
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值