ELK集群搭建(基础教程)

ELK集群搭建(基础教程)

目录:

机器准备

集群内各台机器安装Elasticsearch

安装部署Kafka(注:每个节点都配置,注意ip不同)

安装logstash工具

安装filebeat

ELK收集Nginx的json日志

ELK收集Nginx正常日志和错误日志

ELK收集Tomcat日志

ELK收集docker日志

配置filebeat收集单个docker日志

modules日志收集

使用redis作为缓存收集日志

使用Kafka做缓存收集日志

机器准备

172.20.26.204   node01

172.20.26.207   node02

172.20.26.208   node03

系统版本:CentOS Linux release 7.9.2009 (Core)

#各台服务器安装基础工具软件,系统更新

yum install vim net-tools epel-release wget -y

yum update

#修改每台服务器的hostname

hostnamectl set-hostname node01    #172.20.26.204

hostnamectl set-hostname node02    #172.20.26.207

hostnamectl set-hostname node03    #172.20.26.208

分别在 172.20.26.204、172.20.26.207、172.20.26.208服务器上配置域名映射

[root@node01 ~]# vim /etc/hosts

[root@node02 ~]# vim /etc/hosts

[root@node03 ~]# vim /etc/hosts

172.20.26.204 node01 

172.20.26.207 node02 

172.20.26.208 node03

关闭selinux、firewalld防火墙

[root@bogon ~]# vim /etc/selinux/config

[root@bogon ~]# systemctl stop firewalld

[root@bogon ~]# systemctl disable firewalld

一、集群内各台机器安装Elasticsearch

1、下载Elasticsearch的安装包

官方地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch

2、Elasticsearch安装(每台机器都执行)

#下载安装包存放在/data/software/目录

[root@node01 /]# mkdir -p /data/software && cd /data/software #创建并进入/data/software

[root@node02 /]# mkdir -p /data/software && cd /data/software #创建并进入/data/software

[root@node03 /]# mkdir -p /data/software && cd /data/software #创建并进入/data/software

wget -c https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.9.0-x86_64.rpm

linux开发java环境可能和elasticsearch java环境冲突,因为 elasticsearch 需要JDK才可以 ,所需需要指定elasticsearch的java环境,给它配置一个特定的java环境运行,下载JDK,然后解压即可。

Elasticsearch 和 JVM 兼容性版本查询地址如下:

https://www.elastic.co/cn/support/matrix#matrix_jvm

版本选择推荐及总结

1、ES 7.x 及之前版本,选择 Java 8

2、ES 8.x 及之后版本,选择 Java 17 或者 Java 18,建议 Java 17,因为对应版本的 Logstash 不支持 Java 18

3、Java 9、Java 10、Java 12 和 Java 13 均为短期版本,不推荐使用

4、M1(Arm) 系列 Mac 用户建议选择 ES 7.8.x 以上版本,因为考虑到 ELK 不同产品自身兼容性,7.8.x以上版本原生支持 Arm 原生 JDK

wget -c https://download.oracle.com/java/17/latest/jdk-17_linux-aarch64_bin.tar.gz

tar -zxf jdk-17_linux-aarch64_bin.tar.gz   #各服务器均需安装jdk

下载后可以拷贝到其他服务器的/data/software目录下

#安装

[root@node01 software]# rpm -ivh elasticsearch-8.9.0-x86_64.rpm

[root@node02 software]# rpm -ivh elasticsearch-8.9.0-x86_64.rpm

[root@node03 software]# rpm -ivh elasticsearch-8.9.0-x86_64.rpm

警告:elasticsearch-8.9.0-x86_64.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY

准备中...                          ################################# [100%]

Creating elasticsearch group... OK

Creating elasticsearch user... OK

正在升级/安装...

   1:elasticsearch-0:8.9.0-1          ################################# [100%]

--------------------------- Security autoconfiguration information ------------------------------

Authentication and authorization are enabled.

TLS for the transport and HTTP layers is enabled and configured.

The generated password for the elastic built-in superuser is : 9gVL6ve8ARLwwJibai8Z

If this node should join an existing cluster, you can reconfigure this with

'/usr/share/elasticsearch/bin/elasticsearch-reconfigure-node --enrollment-token <token-here>'

after creating an enrollment token on your existing cluster.

You can complete the following actions at any time:

Reset the password of the elastic built-in superuser with

'/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic'.

Generate an enrollment token for Kibana instances with

 '/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana'.

Generate an enrollment token for Elasticsearch nodes with

'/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node'.

-------------------------------------------------------------------------------------------------

### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd

 sudo systemctl daemon-reload

 sudo systemctl enable elasticsearch.service

### You can start elasticsearch service by executing

 sudo systemctl start elasticsearch.service

172.20.26.204服务器上的elasticsearch安装完成。其他节点同样操作即可

HOME: /usr/share/elasticsearch

配置:/etc/elasticsearch

日志:/var/log/elasticsearch/

数据:/data/elasticsearch

配置2:/etc/sysconfig/elasticsearch

#查看elasticsearch配置文件目录

[root@node01 software]# rpm -qc elasticsearch

/etc/elasticsearch/elasticsearch-plugins.example.yml

/etc/elasticsearch/elasticsearch.yml

/etc/elasticsearch/jvm.options

/etc/elasticsearch/log4j2.properties

/etc/elasticsearch/role_mapping.yml

/etc/elasticsearch/roles.yml

/etc/elasticsearch/users

/etc/elasticsearch/users_roles

/etc/sysconfig/elasticsearch

/usr/lib/sysctl.d/elasticsearch.conf

/usr/lib/systemd/system/elasticsearch.service

#修改 elasticsearch 下的bin/elasticsearch(各服务器均需操作

#在首行添加

#配置自己的jdk17

vim /usr/share/elasticsearch/bin/elasticsearch

export JAVA_HOME=/data/software/jdk-17.0.8

export PATH=$JAVA_HOME/bin:$PATH

#添加jdk判断

if [ -x "$JAVA_HOME/bin/java" ]; then

        JAVA="/data/software/jdk-17.0.8 /bin/java"

else

为后面es集群设置,每个节点操作如下:

#编辑elasticsearch.yml配置文件

vim /etc/elasticsearch/elasticsearch.yml

grep "^[a-Z]" /etc/elasticsearch/elasticsearch.yml

cluster.name: es_cluster     #集群名称,各节点要一致

node.name: node01            #节点名称,同一个集群内所有节点的节点名称不能重复     

path.data: /data/elasticsearch      #将es的数据存在该目录,注意创建该目录

path.logs: /var/log/elasticsearch  #日志目录,会创建以集群名称的一个日志目录   eg:es-app.log

bootstrap.memory_lock: true                                          #内存锁定

network.host: 0.0.0.0                                          #绑定监听地址

http.port: 9200                                                           #默认端口号

discovery.seed_hosts: ["172.20.26.204", "172.20.26.207","172.20.26.208"]

cluster.initial_master_nodes: ["node01","node02","node03"]

xpack.security.enabled: false

xpack.security.enrollment.enabled: true

xpack.security.http.ssl:

xpack.security.transport.ssl:

http.host: 0.0.0.0

transport.host: 0.0.0.0

 

vim /etc/systemd/system.conf  #每个节点操作一遍

DefaultLimitNOFILE=65536

DefaultLimitNPROC=32000

DefaultLimitMEMLOCK=infinity

保存, 重启系统

#创建es数据存储目录

[root@node01 software]# mkdir -p /data/elasticsearch

[root@node02 software]# mkdir -p /data/elasticsearch

[root@node03 software]# mkdir -p /data/elasticsearch

# 创建证书目录

[root@node01 software]#mkdir -p /etc/elasticsearch/certs

[root@node01 bin]# vim /etc/elasticsearch/jvm.options

#去掉以下注释并顶格,各个节点均需操作

-Xms2g  #默认是4g,可以根据自己情况适当调整大小,例如,1g、2g

-Xmx2g  #默认是4g,可以根据自己情况适当调整大小,例如,1g、2g

#es因为安全问题拒绝使用root用户启动(各节点均需操作

解决方法:

1.添加用户组es、创建用户es并设置密码

groupadd es

useradd es -g es -p 1qaz2wsx    # -g 指定组 -p 设置密码为1qaz2wsx

2.添加目录拥有权限

更改 elasticsearch文件夹及内部文件的所属用户及组为es,如果是编译安装或者是二进制安装的话,可能只有一个目录。

[root@node01 ~]# find / -name elasticsearch

/etc/sysconfig/elasticsearch

/etc/elasticsearch

/var/lib/elasticsearch

/var/log/elasticsearch

/usr/share/elasticsearch

/usr/share/elasticsearch/bin/elasticsearch

/data/elasticsearch

# -R 处理指定目录以及其子目录下的所有文件权限赋予es用户及es组

chown es:es -R /etc/sysconfig/elasticsearch /etc/elasticsearch /var/lib/elasticsearch /var/log/elasticsearch /usr/share/elasticsearch /data/elasticsearch

解决Elasticsearch集群开启账户密码安全配置自相矛盾的坑

  1. 生成CA证书

在第一台服务器节点 node01 设置集群多节点通信密钥,使用 elasticsearch-certutil 工具为您的集群生成 CA。

[root@node01 ~]# cd /usr/share/elasticsearch/bin/

[root@node01 bin]# ./elasticsearch-certutil ca

a.出现提示时,接受默认文件名,即 elastic-stack-ca.p12。此文件包含 CA 的公共证书和用于为每个节点签署证书的私钥。

b.输入 CA 的密码。如果不部署到生产环境,您可以选择将密码留空,这里输入的密码为1qaz2wsx

2、配置CA证书

用 ca 证书签发节点证书,为集群中的节点生成证书和私钥。包括在上一步中生成的 elastic-stack-ca.p12 输出文件。

[root@node01 bin]# ./elasticsearch-certutil cert --ca elastic-stack-ca.p12

根据提示

a.输入您的 CA 的密码,请按 Enter。

b.为证书创建密码并接受默认文件名。创建的密码为1qaz2wsx

输出文件是一个名为 elastic-certificates.p12 的密钥库。此文件包含节点证书、节点密钥和 CA 证书。

将生成的证书文件移动到证书目录中(/etc/elasticsearch/certs)

[root@node01 bin]# mv /usr/share/elasticsearch/elastic-certificates.p12 /etc/elasticsearch/certs/

3、复制证书到集群

在集群中的每个节点上,将 elastic-certificates.p12 文件复制到 证书目录中/etc/elasticsearch/certs

[root@node01 certs]# scp elastic-certificates.p12 root@172.20.26.207:/etc/elasticsearch/certs/

[root@node01 certs]# scp elastic-certificates.p12 root@172.20.26.208:/etc/elasticsearch/certs/

[root@node01 certs]# chown es:es -R /etc/elasticsearch  #各个节点再次给/etc/elasticsearch 赋权给es用户和组

4、修改配置文件(需要注意的是:格式一定要对齐,否则会报错)

vim /etc/elasticsearch/elasticsearch.yml    #各个节点打开配置文件进行修改

a.基本集群配置,不启用安全也需要的配置

cluster.name: es_cluster  #每个节点一致

node.name: node01  #每个节点不同

b.安全配置

由于在群集的每个节点上使用相同的Elastic-Certificate.p12文件,因此将验证模式设置为证书:

xpack.security.transport.ssl.enabled: true

xpack.security.transport.ssl.verification_mode: certificate

xpack.security.transport.ssl.client_authentication: required

xpack.security.transport.ssl.keystore.path: /etc/elasticsearch/certs/elastic-certificates.p12

xpack.security.transport.ssl.truststore.path: /etc/elasticsearch/certs/elastic-certificates.p12

5、配置密码

如果在创建节点证书时输入了密码,运行以下命令以将密码存储在Elasticsearch密钥库中:

[root@node01 ~]# su es    #切换到es用户下执行

[es@node01 elasticsearch]$ cd /usr/share/elasticsearch/bin  #各服务器切换到elasticsearch的bin目录下,密码设置为1qaz2wsx

[es@node01 bin]$

./elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password

./elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password

./elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password

./elasticsearch-keystore add xpack.security.http.ssl.truststore.secure_password

也可以自动生成随机密码,elasticsearch-setup-passwords auto

4-5的步骤在每个节点中都需要进行。

密码设置为1qaz2wsx

6、重新启动es服务

在es用户下,node01、node02、node03的elasticsearch服务重启

[root@node01 ~]# su es

[es@node01 root]$ cd /usr/share/elasticsearch/bin/

[es@node01 bin]$./elasticsearch -d    #后台方式启动

Node03也可以用同样方法启动。

后面也可以创建elasticsearch.sh脚本来启动:

mkdir -p /data/sh && cd /data/sh

vim /data/sh/elasticsearch.sh

#!/bin/bash

sudo -u es bash << EOF

cd /usr/share/elasticsearch/bin

./elasticsearch -d

EOF

保存退出

脚本说明:其中,普通用户名称需要替换为实际的普通用户名称。在脚本中使用sudo -u命令可以切换到指定的用户下执行命令,<< EOF和EOF之间的代码块是在普通用户下执行的命令。执行完普通用户下的命令后,脚本会自动切换回root用户,继续执行后续的命令。

[root@node01 sh]# chmod +x /data/sh/elasticsearch.sh #赋予/data/sh/elasticsearch.sh 可执行权限

[root@node01 sh]# sh elasticsearch.sh  #在root用户下,执行elasticsearch.sh启动脚本

[root@node01 sh]# ./elasticsearch.sh

/var/tmp/scl5h41LI: line 8: -u: command not found

 

9200、9300端口开启,Elasticsearch 服务启动完成。

同时将elasticsearch.sh脚本文件拷贝到其他节点对应的目录下,执行elasticsearch.sh启动服务。

[root@node01 sh]# scp elasticsearch.sh root@172.20.26.207:/data/sh/

[root@node01 sh]# scp elasticsearch.sh root@172.20.26.208:/data/sh/

node02、node03节点上的elasticsearch服务均已启动。

将elasticsearch.sh启动添加到开机启动中,各个节点均需执行

1、编辑启动文件

[root@node01 sh]# vim /etc/rc.d/rc.local  #添加以下内容

/data/sh/elasticsearch.sh

保存退出

[root@node01 sh]# chmod +x /etc/rc.d/rc.local   #添加可执行权限

[root@node01 sh]# systemctl restart rc-local.service

[root@node01 sh]# systemctl status rc-local.service

# 如需指定用户启动 请使用如下方式:su - username -c “your-cammand”

/bin/su - es -c '/data/sh/elasticsearch.sh'  

保存退出

[root@node01 sh]#chmod +x /etc/rc.d/rc.local  #添加可执行权限

systemctl restart rc-local.service && systemctl status rc-local.service #重启并查看状态

报错:es用户权限不够,需要提升权限

在root用户下查看/etc/sudoers文件权限,如果是只读权限,修改为可写权限

[root@node01 sh]# ll /etc/sudoers  #查看/etc/sudoers文件权限

-r--r-----. 1 root root 4328 9月  30 2020 /etc/sudoers   #只有只读权限

[root@node01 sh]# chmod u+w /etc/sudoers   #修改为可写权限

[root@node01 sh]# ll /etc/sudoers   #再次查看/etc/sudoers文件权限

-rw-r-----. 1 root root 4328 9月  30 2020 /etc/sudoers   #增加了可写权限

[root@node01 sh]# vim /etc/sudoers   #编辑/etc/sudoers文件,在root    ALL=(ALL)       ALL的下一行添加代码es    ALL=(ALL)       ALL

保存退出

[root@node01 sh]# chmod 440 /etc/sudoers  #恢复/etc/sudoers的权限为440

[root@node01 sh]# ll /etc/sudoers

-r--r----- 1 root root 4354 9月   6 10:23 /etc/sudoers

[root@node01 sh]# systemctl restart rc-local.service   #重启rc-local服务

[root@node01 sh]# systemctl status rc-local.service   #查看rc-local状态,然后重启服务器,验证elasticsearch.sh开机启动。

完成elasticsearch.sh脚本开机自动执行成功。

其他节点同样操作即可完成elasticsearch.sh脚本开机自动执行。

3、检查ES集群部署

各个节点修改elasticsearch.yml

vim /etc/elasticsearch/elasticsearch.yml

# 指定集群名称3个节点必须一致 cluster.name: es_cluster

#指定节点名称,每个节点名字唯一 node.name: node01

#是否有资格为master节点,默认为true,node.master: true

#是否为data节点,默认为true,node.data: true

# 绑定ip,开启远程访问,可以配置0.0.0.0,这里也可以配ip地址 network.host: 0.0.0.0

#指定web端口 #http.port: 9200

#指定tcp端口 #transport.tcp.port: 9300

#用于节点发现,如果你不配域名映射,直接用ip也是可以的 discovery.seed_hosts: ["node01", "node02", "node03"]

如果后期有新节点加入,新节点的 discovery.seed_hosts 没必要包含所有的节点,只要它里面包含集群中已有的节点信息,新节点就能发现整个集群了。

#7.0新引入的配置项,初始仲裁,仅在整个集群首次启动时才需要初始仲裁。

#该选项配置为node.name的值,指定可以初始化集群节点的名称,每个节点的名称 cluster.initial_master_nodes: ["node01","node02","node03"]

因此当您在生产模式下第一次启动全新的群集时,你必须显式列出符合资格的主节点。也就是说,需要使用 cluster.initial_master_nodes 设置来设置该主节点列表。重新启动集群或将新节点添加到现有集群时,你不应使用此设置。

cluster.initial_master_nodes 该配置项并不是需要每个节点设置保持一致,设置需谨慎,如果其中的主节点关闭了,可能会导致其他主节点也会关闭。因为一旦节点初始启动时设置了这个参数,它下次启动时还是会尝试和当初指定的主节点链接,当链接失败时,自己也会关闭!

因此,为了保证可用性,预备做主节点的节点不用每个上面都配置该配置项!保证有的主节点上就不设置该配置项,这样当有主节点故障时,还有可用的主节点不会一定要去寻找初始节点中的主节点!

注意:第一次成功形成集群后,从每个节点的配置中删除 cluster.initial_master_nodes 设置。重新启动集群或向现有集群添加新节点时,请勿使用此设置。

Node01

[es@node01 bin]$ grep "^[a-Z]" /etc/elasticsearch/elasticsearch.yml

cluster.name: es_cluster

node.name: node01

path.data: /data/elasticsearch

path.logs: /var/log/elasticsearch

bootstrap.memory_lock: true

network.host: 0.0.0.0

http.port: 9200

discovery.seed_hosts: ["172.20.26.204", "172.20.26.207","172.20.26.208"]

cluster.initial_master_nodes: ["node01", "node02","node03"]

xpack.security.enabled: false

xpack.security.enrollment.enabled: true

xpack.security.http.ssl:

xpack.security.transport.ssl:

http.host: 0.0.0.0

transport.host: 0.0.0.0

Node02

[es@node02 bin]$ grep "^[a-Z]" /etc/elasticsearch/elasticsearch.yml

cluster.name: es_cluster

node.name: node02

path.data: /data/elasticsearch

path.logs: /var/log/elasticsearch

bootstrap.memory_lock: true

network.host: 0.0.0.0

http.port: 9200

discovery.seed_hosts: ["172.20.26.204", "172.20.26.207","172.20.26.208"]

cluster.initial_master_nodes: ["node01", "node02","node03"]

xpack.security.enabled: false

xpack.security.enrollment.enabled: true

xpack.security.http.ssl:

xpack.security.transport.ssl:

http.host: 0.0.0.0

transport.host: 0.0.0.0

Node03

[es@node03 bin]$ grep "^[a-Z]" /etc/elasticsearch/elasticsearch.yml

cluster.name: es_cluster

node.name: node03

path.data: /data/elasticsearch

path.logs: /var/log/elasticsearch

bootstrap.memory_lock: true

network.host: 0.0.0.0

http.port: 9200

discovery.seed_hosts: ["172.20.26.204", "172.20.26.207","172.20.26.208"]

cluster.initial_master_nodes: ["node01", "node02","node03"]

xpack.security.enabled: false

xpack.security.enrollment.enabled: true

xpack.security.http.ssl:

xpack.security.transport.ssl:

http.host: 0.0.0.0

transport.host: 0.0.0.0

三台机器的elasticsearch服务均已启动,然后访问随意一台机器即可,例如:172.20.26.204:9200,出现如下就说明访问成功了。

172.20.26.204:9200/_cat/nodes  #查看集群状态

设置账号

在使用它们之前,我们必须为它们设置一个账号,切换到 Elasticsearch的bin目录下

[root@node01 elasticsearch]# su es

[es@node01 elasticsearch]$ cd /usr/share/elasticsearch/bin

[es@node01 bin]$ ./elasticsearch-users useradd es -r superuser  #设置es用户并赋予超级用户角色

然后输入两次密码,1qaz2wsx

在浏览器地址输入:172.20.26.204:9200 ,输入刚才创建的用户es和密码1qaz2wsx

向集群中创建一些索引、数据

创建索引

[root@node01 elasticsearch]# curl -XPUT '172.20.26.204:9200/vipinfo?pretty'

{

  "acknowledged" : true,

  "shards_acknowledged" : true,

  "index" : "vipinfo"

}

在各节点上查看集群状态

[root@node01 elasticsearch]# curl -XGET 'http://localhost:9200/_cat/nodes'

也可以在浏览器中查看集群状态

172.20.26.208:9200/_cat/nodes

查看集群健康状态:

[es@node01 bin]$ curl -XGET 'http://localhost:9200/_cluster/health'

./elasticsearch-reset-password -u elastic -i   #重置elastic(内置超级用户账号)

ERROR: Failed to determine the health of the cluster

后续再排查elastic账号密码重置的问题

4、安装Elasticsearch-head插件(可视化插件), 安装在master上即可

安装ES可视化插件ES-head前需安装node.js

#安装node.js

官网地址:Node.js — Download

下载解压(右键复制链接)

[root@node01 ~]# cd /data/software/

[root@node01 software]# wget https://nodejs.org/dist/v18.17.1/node-v18.17.1-linux-x64.tar.xz

[root@node01 software]# tar -xf node-v18.17.1-linux-x64.tar.xz

然后我们再配置环境变量:

vi /etc/profile

在最后加上:

export NODE_HOME=/data/software/node-v18.17.1-linux-x64

export PATH=$NODE_HOME/bin:$PATH

保存,再执行

source /etc/profile  让环境变量生效

node -v   #查看版本

npm -v   #查看版本

#phantomjs 官网     Download PhantomJS

[root@node01 software]#wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2

#以下两个如果已经装过可忽略

yum -y install bzip2

yum -y install fontconfig-devel

[root@node01 software]#tar -xvjf  phantomjs-2.1.1-linux-x86_64.tar.bz2

#创建软连接

ln -s /data/software/node-v18.17.1-linux-x64/bin/node /usr/local/bin/node

ln -s /data/software/node-v18.17.1-linux-x64/bin/npm /usr/local/bin/npm

ln -s /data/software/phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/phantomjs

#查看版本

node -vnpm -vphantomjs --version

node: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by node)

node: /lib64/libc.so.6: version `GLIBC_2.25' not found (required by node)

node: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by node)

node: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by node)

node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by node)

node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by node)

# 查看系统内安装的glibc版本

strings /lib64/libc.so.6 |grep GLIBC_

[root@node01 build]# rpm -qa | grep glibc

glibc-headers-2.17-326.el7_9.x86_64

glibc-common-2.17-326.el7_9.x86_64

glibc-2.17-326.el7_9.x86_64

glibc-devel-2.17-326.el7_9.x86_64

#安装gcc-8.2.0所依赖的环境

#a

[root@node01 usr]# yum install zlib-devel pcre-devel bison bzip2 gcc gcc-c++ glibc-headers -y    #安装相关依赖包

#b升级GNU Make 3.82到4.3

yum install centos-release-scl -y

yum install devtoolset-8 -y

scl enable devtoolset-8 -- bash

# 设置环境变量

echo "source /opt/rh/devtoolset-8/enable" >> /etc/profile

source /etc/profile

#b升级make

还是进入root目录下

cd /root

wget https://ftp.gnu.org/gnu/make/make-4.3.tar.gz

tar -xzvf make-4.3.tar.gz && cd make-4.3/

# 安装到指定目录

./configure  --prefix=/usr/local/make

make -j 4 && make install

# 创建软链接

cd /usr/bin/ && mv make make.bak

ln -sv /usr/local/make/bin/make /usr/bin/make

cd /root

# 编译安装  (如果编译失败了,可以使用make clean清除已编译的内容,再重新编译、安装)

wget http://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz

tar -xf glibc-2.28.tar.gz

cd glibc-2.28/ && mkdir build && cd build

../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin

[root@node01 build]#make -j 4 && make install

[root@node01 software]#wget https://cdn.frostbelt.cn/software/libstdc%2B%2B.so.6.0.26

[root@node01 software]# cp libstdc++.so.6.0.26 /usr/lib64/

[root@node01 software]# cd /usr/lib64/

[root@node01 lib64]# ln -snf ./libstdc++.so.6.0.26 libstdc++.so.6

[root@node01 build]# node -vnpm -vphantomjs --version  #查看版本

#假如Node01 重启后,使用ssh远程登录,出现如下告警信息:

-bash: 警告:setlocale: LC_TIME: 无法改变区域选项 (zh_CN.UTF-8)

原因分析:

系统已经设置了默认地区_语言.字符集为zh_CN.UTF-8,但是在系统中没有定义对应的locale文件,所以只需要手动生成这个locale文件即可!

解决办法:

1)# vim /etc/environment #添加下面两行内容

LANG="zh_CN.UTF-8"

LC_ALL=

2)source这个文件内容:

# source /etc/environment

3)# vim /etc/sysconfig/i18n

LANG="zh_CN.UTF-8"

4)然后执行如下命令,生成 en_US.UTF-8这个字符集对应的locale文件:

# localedef -v -c -i zh_CN -f UTF-8 zh_CN.UTF-8

下载安装ES-head插件

电脑上浏览器打开

https://download.csdn.net/download/weixin_41879185/87749515?utm_source=bbsseo

点击“立即下载”,完成后将elasticsearch-head.zip上传到服务器的/data/software/目录下

[root@node01 ~]# cd /data/software/

[root@node01 software]#unzip elasticsearch-head.zip #解压elasticsearch-head.zip包

[root@node01 software]# cd elasticsearch-head   #进入到elasticsearch-head目录

npm install

npm run start

nohup grunt server &  # #重新后台运行head插件服务,这个要注意,一定要在插件也就是上方的目录的根目录下,执行此条命令才可以。

nohup npm run start &  #使用grunt方式后台运行启动

npm install -g grunt-cli

grunt server &netstat -tulnp| grep 9100

http://172.20.26.204:9100/,显示集群健康值: 未连接

原因是:因为给ES配置了加密,用之前的访问链接访问不到,访问的时候需要用户认证。

[root@node01 software]# vim /etc/elasticsearch/elasticsearch.yml

http.cors.enabled: true                           # 开启跨域访问支持,默认为false

http.cors.allow-origin: "*"                        # 跨域访问允许的域名地址

http.cors.allow-headers: Authorization,Content-Type

保存退出

保存文件后重启 elasticsearch 和 elasticsearch-head

[root@node01 bin]# cd /data/software/elasticsearch-head

[root@node01 elasticsearch-head]# nohup npm run start &  #后台启动运行

http://172.20.26.204:9100/?auth_user=es&auth_password=1qaz2wsx   

#浏览器中打开,使用es用户和密码1qaz2wsx  #前面已创建完成,后面也可以使用http://172.20.26.204:9100/来打开

创建elasticsearch-head启动脚本

#!/ban/bash

cd /data/software/elasticsearch-head

nohup npm run start &

保存退出

chmod +x /data/sh/es_head.sh  #将脚本添加可执行权限

vim /etc/rc.d/rc.local  #把脚本添加到开机启动服务

chmod +x /etc/rc.d/rc.local

systemctl restart rc-local.service

systemctl status rc-local.service

二、安装Kibana(各节点上安装配置)

在node01节点上

#下载kibana-8.9.1-linux-x86_64.tar.gz包

[root@node01 certs]# cd /data/software   #进入软件存放目录

wget -c https://artifacts.elastic.co/downloads/kibana/kibana-8.9.1-linux-x86_64.tar.gz

#各个节点安装kibana-8.9.1-linux-x86_64.tar.gz包

tar -zxf kibana-8.9.1-linux-x86_64.tar.gz

#各个节点修改Kibana配置文件

vim /data/software/kibana-8.9.1/config/kibana.yml

[root@node01 software]# grep "^[a-Z]" /data/software/kibana-8.9.1/config/kibana.yml

server.port: 5601   # 站点端口号

server.host: "172.20.26.204"

server.name: "node01"

elasticsearch.hosts: ["http://localhost:9200"]

i18n.locale: "zh-CN"

kibana.index: ".kibana"

[root@node01 bin]# chown -R es:es /data/software/kibana-8.9.1  #将整个kibana-8.9.1目录更改属组为es用户和组

#启动Kibana&&查看服务状态&&通过IP访问界面

[root@node01 bin]#./kibana --allow-root  #kibana不建议以root用户启动,如果用root启动,需要加--allow-root,我们这里用es用户来启动kibana服务

[root@node01 bin]# su es

[es@node01 bin]$ ./kibana  #前台启动kibana服务

[es@node01 bin]$nohup ./kibana &    #也可以将Kibana服务的后台启动

[es@node01 bin]$ tail -f /home/es/nohup.out   #查看kibana的日志

打开http://172.20.26.204:5601 ,点击“自己浏览”。

稍等一会

这里你就可以看到集群的状态看,退出右上角“设置模式”,点击nodes就可以查看到节点状态,你可以随便点点就知道能浏览查看什么数据了,这里不再过多介绍。

如果你想管理索引,点击左边菜单栏,点击最底下的Stack Management,找到索引管理,里面的功能基本上就可以对ES上的数据进行操作了 。

#设置开机启动kiban服务

创建启动脚本

vim /data/sh/kibana.sh   #因kibana 用的是非root用户运行,这里我们使用前面创建的es用户运行

#!/bin/bash

sudo -u es bash << EOF

cd /data/software/kibana-8.9.1/bin

nohup ./kibana &

EOF

保存退出

chmod +x /data/sh/kibana.sh  #添加可执行权限

vim /etc/rc.d/rc.local

保存退出

chmod +x /etc/rc.d/rc.local

systemctl restart rc-local.service

systemctl status rc-local.service

节点node02、node03上进行同样的设置。

scp /data/sh/kibana.sh root@172.20.26.207:/data/sh  #将脚本拷贝到node02相应路径下

scp /data/sh/kibana.sh root@172.20.26.208:/data/sh  #将脚本拷贝到node03相应路径下

chmod +x /data/sh/kibana.sh  #添加可执行权限

vim /etc/rc.d/rc.local  #添加/data/sh/kibana.sh执行命令

/data/sh/kibana.sh

保存退出

chmod +x /etc/rc.d/rc.local  #添加可执行权限

systemctl restart rc-local.service

systemctl status rc-local.service

三、安装logstash工具

#官网下载

https://www.elastic.co/cn/downloads/past-releases

选择产品Logstash,选择合适的版本即可,因为我们的前面安装配置的是elasticsearch-8.9.0-x86_64,所以我们也尽量安装相同版本的Logstash

点击“Download”,右键“LINUX X86_64”,复制链接

cd /data/software #进入/data/software,将安装包下载到这里

wget -c https://artifacts.elastic.co/downloads/logstash/logstash-8.9.0-linux-x86_64.tar.gz

[root@node01 software]# tar -zxf logstash-8.9.0-linux-x86_64.tar.gz

#安装结果测试

执行以下命令:

cd /data/software/logstash-8.9.0

bin/logstash -e 'input { stdin { } } output { stdout {} }'

看到这样的输出结果,说明Logstash 安装是成功的。

#将ES的证书复制到Logstash目录。因为我们的ES使用的HTTPS访问认证, Logstash要发送日志到ES时,需要进行证书认证。

[root@node01 logstash-8.9.0]# cp -r /etc/elasticsearch/certs /data/software/logstash-8.9.0/

#添加一个配置文件,以收集操作系统日志作为例子

vim /data/software/logstash-8.9.0/systemlog.conf

input {

   tcp {

      port=> 9900

     }

}

    filter {

     grok {

     match => { “message" => "%{COMBINEDAPACHELOG}" }

}

mutate {

convert => {

   “bytes” => “integer”

}

}

 geoip {

   source => “clientip”

   target => “clientgeo”

}

useragent {

  source => “agent”

  target => “useragent”

    }

}

output {

  stdout { }

    

 elasticsearch {

        hosts  => ["http://172.20.26.204:9200","http://172.20.26.207:9200","http://172.20.26.208:9200"]

       index  => "logstash}"

      user  => "es"

      password  => "1qaz2wsx"

        }

}

#收集日志。运行日志收集脚本,开始收集日志,并查看日志

执行日志收集命令:

[root@node01 certs]#/data/software/logstash-8.9.0/bin/logstash -f /data/software/logstash-8.9.0/systemlog.conf

cd /etc/logstash/conf.d

vim nginx_log.conf

input {

  redis {

    host => "10.20.1.114"

    port => "6379"

    db => "0"

    key => "nginx_access"

    data_type => "list"

  }

  redis {

    host => "10.20.1.114"

    port => "6379"

    db => "0"

    key => "nginx_error"

    data_type => "list"

  }

}

filter {

  mutate {

    convert => ["upstream_time", "float"]

    convert => ["request_time", "float"]

  }

}

output {

   stdout {}

   if "access" in [tags] {

      elasticsearch {

        hosts => "http://10.20.1.114:9200"

        manage_template => false

        index => "nginx_access-%{+yyyy.MM}"

      }

    }

    if "error" in [tags] {

      elasticsearch {

        hosts => "http://10.20.1.114:9200"

        manage_template => false

        index => "nginx_error-%{+yyyy.MM}"

      }

    }

}

#启动logstash

/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/nginx_log.conf

四、安装filebeat

#官网下载

https://www.elastic.co/cn/downloads/past-releases#   #选择产品Filebeat及其版本

Past Releases of Elastic Stack Software | Elastic

点击“Download”,右键“LINUX X86_64”,复制链接地址

cd /data/software #进入/data/software,将安装包下载到这里

wget -c https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.9.0-linux-x86_64.tar.gz

[root@node01 software]# tar -zxf filebeat-8.9.0-linux-x86_64.tar.gz

[root@node01 software]# cd filebeat-8.9.0-linux-x86_64 #进入filebeat目录下

[root@node01 filebeat-8.9.0-linux-x86_64]# vim mogublog.yml  #创建对应的配置文件

filebeat.inputs: # filebeat input输入

- type: stdin    # 标准输入

  enabled: true  # 启用标准输入

setup.template.settings:

  index.number_of_shards: 3 # 指定下载数

output.console:  # 控制台输出

  pretty: true   # 启用美化功能

  enable: true

chmod go-w /data/software/filebeat-8.9.0-linux-x86_64/mogublog.yml

[root@node01 filebeat-8.9.0-linux-x86_64]# ./filebeat -e -c mogublog.yml  # 通过二进制文件来实现filebeat服务启动

#读取文件配置

再次创建一个文件mogublog-log.yml

[root@node01 filebeat-8.9.0-linux-x86_64]#vim mogublog-log.yml

filebeat.inputs:

- type: log

  enabled: true

  paths:

    - /data/software/filebeat-8.9.0-linux-x86_64/logs/*.log

setup.template.settings:

  index.number_of_shards: 3

output.console:

  pretty: true

  enable: true

#添加完成后,我们在到下面目录创建一个日志文件

mkdir -p /data/software/filebeat-8.9.0-linux-x86_64/logs

cd /data/software/filebeat-8.9.0-linux-x86_64/logs

echo "hello" >> a.log

#再次启动filebeat

chmod go-w /data/software/filebeat-8.9.0-linux-x86_64/mogublog-log.yml

./filebeat -e -c mogublog-log.yml

能够发现,它已经成功加载到了我们的日志文件 a.log

echo "are you ok ?" >> a.log

#再次启动filebeat

[root@node01 filebeat-8.9.0-linux-x86_64]# ./filebeat -e -c mogublog-log.yml

nohup ./filebeat -e -c filebeat.yml >/dev/null 2>&1 &   #后台启动filebeat服务

#新建配置文件filebeat_apache.yml

vim /data/software/filebeat-8.9.0-linux-x86_64/filebeat_apache.yml

filebeat.inputs:

- type: log

  enabled: true

  paths:

    - /data/software/filebeat-8.9.0-linux-x86_64/apache_logs/*

output.logstash:

  hosts: ["localhost:5044"]

mkdir -p /data/software/filebeat-8.9.0-linux-x86_64/apache_logs  #创建apache_logs目录

运行Filebeat

cd /data/software/filebeat-8.9.0-linux-x86_64

[root@node01 filebeat-8.9.0-linux-x86_64]# ./filebeat -c filebeat_apache.yml

Exiting: /data/software/filebeat-8.9.0-linux-x86_64/data/filebeat.lock: data path already locked by another beat. Please make sure that multiple beats are not sharing the same data path (path.data)

原因

本机器已经存在filebeat启动,datapath被lock

解决办法

关闭已存在filebeat的进程,然后重新启动

[root@node01 filebeat-8.9.0-linux-x86_64]# ps -ef | grep filebeat

root      1492     1  0 10:33 ?        00:00:04 ./filebeat -e -c filebeat.yml

root     16992  1584  0 16:20 pts/0    00:00:00 grep --color=auto filebeat

[root@node01 filebeat-8.9.0-linux-x86_64]# kill -9 1492  #kill 掉filebeat 进程

[root@node01 filebeat-8.9.0-linux-x86_64]# ./filebeat -c filebeat_apache.yml

就会将日志同步到Logstash。

#输出到ElasticSearch

vim /data/software/filebeat-8.9.0-linux-x86_64/filebeat.yml

我们可以通过配置,将修改成如下所示

filebeat.inputs:

- type: log

  enabled: true

  paths:

    - /data/software/filebeat-8.9.0-linux-x86_64/logs/*.log

  tags: ["web", "test"]

  fields:

    from: test-web

  fields_under_root: false

setup.template.settings:

  index.number_of_shards: 1

output.elasticsearch:

  hosts: ["172.20.26.204:9200"]

启动成功后,我们就能看到它已经成功连接到es了

我们到刚刚的 logs文件夹向 a.log文件中添加内容

[root@node01 ~]# cd /data/software/filebeat-8.9.0-linux-x86_64/logs/

[root@node01 logs]# echo "hello mogublog" >> a.log

在ES中,我们可以看到,多出了一个 filebeat的索引库

然后我们浏览对应的数据,看看是否有插入的数据内容

启动命令

./filebeat -e -c mogublog-es.yml

./filebeat -e -c mogublog-es.yml -d "publish"

参数说明

-e:输出到标准输出,默认输出到syslog和logs下

-c:指定配置文件

-d:输出debug信息

设置开机启动

[root@node01 sh]# vim /data/sh/filebeat.sh  #创建filebeat服务启动脚本

#!/bin/bash

cd /data/software/filebeat-8.9.0-linux-x86_64

nohup ./filebeat -e -c filebeat.yml >/dev/null 2>&1 &

保存退出

chmod +x /data/sh/filebeat.sh

vim /etc/rc.d/rc.local  #/data/sh/filebeat.sh将添加到开机启动

chmod +x /etc/rc.d/rc.local

systemctl restart rc-local.service

systemctl status rc-local.service

五、ELK收集Nginx的json日志

思路:

1、将nginx中的日志以json格式记录

2、filebeat采的时候说明是json格式

3、传入es的日志为json,那么显示在kibana的格式也是json,便于日志管理

1、配置nginx的日志以json格式记录

#修改/etc/nginx/nginx.conf配置文件,加入以下内容,yml文件注意缩进

log_format  json '{ "time_local": "$time_local", '

                           '"remote_addr": "$remote_addr", '

                           '"referer": "$http_referer", '

                           '"request": "$request", '

                           '"status": $status, '

                           '"bytes": $body_bytes_sent, '

                           '"agent": "$http_user_agent", '

                           '"x_forwarded": "$http_x_forwarded_for", '

                           '"up_addr": "$upstream_addr",'

                           '"up_host": "$upstream_http_host",'

                           '"upstream_time": "$upstream_response_time",'

                           '"request_time": "$request_time"'

                    ' }';

access_log  /var/log/nginx/access.log  json;

#重启nginx服务

systemctl restart nginx.service

#再次进行压测&&查看nginx日志是否记录显示为json格式的键值对&&查看可知已是json格式

ab -n 100 -c 100 http://172.20.26.204/

tail -f /var/log/nginx/access.log

2、filebeat采的时候说明是json格式

#备份filebeat配置文件到/root目录下

[root@master soft]# cp /etc/filebeat/filebeat.yml /root/

#修改配置文件

cat > /etc/filebeat/filebeat.yml <<EOF

filebeat.inputs:          #输入

- type: log                        #输入类型

  enabled: true

  paths:                            #filebeat采集路径

    - /var/log/nginx/access.log

  #说明input的日志是json格式

  json.keys_under_root: true

  json.overwrite_keys: true

setup.kibana:

  host: "172.20.26.204:5601"

output.elasticsearch: #输出

  hosts: ["172.20.26.204:9200"]

  index: "nginx-%{[beat.version]}-%{+yyyy.MM}"

setup.template.name: "nginx"

setup.template.pattern: "nginx-*"

setup.template.enabled: false

setup.template.overwrite: true

EOF

六、ELK收集Nginx正常日志和错误日志

#编辑filebeat的配置文件,在/etc/filebeat/filebeat.yml加入以下配置

#filebeat输入配置

filebeat.inputs:

- type: log

  enabled: true

  paths:

    - /var/log/nginx/access.log

  #输入为json格式

  json.keys_under_root: true

  json.overwrite_keys: true

  #对正常日志加上access标签

  tags: ["access"]

- type: log

  enabled: true

  paths:

    - /var/log/nginx/error.log

  #对错误日志加上error标签

  tags: ["error"]

setup.kibana:

  host: "172.20.26.204:5601"

#filebeat输入配置

output.elasticsearch:

  hosts: ["172.20.26.204:9200"]

  #index: "nginx-%{[beat.version]}-%{+yyyy.MM}"

  indices:

    #将输入带有access标签输出为这个索引

    - index: "nginx-access-%{[beat.version]}-%{+yyyy.MM}"

      when.contains:

        tags: "access"

    #将输入带有error标签输出为这个索引

    - index: "nginx-error-%{[beat.version]}-%{+yyyy.MM}"

      when.contains:

        tags: "error"

setup.template.name: "nginx"

setup.template.pattern: "nginx-*"

setup.template.enabled: false

setup.template.overwrite: true

#保存退出&&重启filebeat服务&&重新压测数据(访问不存在页面)即可查看到现象

七、ELK收集Tomcat日志

#安装成功tomcat&&启动tomcat&&访问测试(1查看8080默认端口是否开启,2通过IP:8080在浏览器访问观察是否有tomcat官网页面)

yum install tomcat tomcat-webapps tomcat-admin-webapps tomcat-docs-webapp tomcat-javadoc -y

systemctl start tomcat

#修改tomcat日志为json格式

vim /etc/tomcat/server.xml

##删除第139行

139                pattern="%h %l %u %t &quot;%r&quot; %s %b" />

##将以下配置放入到139行

pattern="{&quot;clientip&quot;:&quot;%h&quot;,&quot;ClientUser&quot;:&quot;%l&quot;,&quot;authenticated&quot;:&quot;%u&quot;,&quot;AccessTime&quot;:&quo    t;%t&quot;,&quot;method&quot;:&quot;%r&quot;,&quot;status&quot;:&quot;%s&quot;,&quot;SendBytes&quot;:&quot;%b&quot;,&quot;Query?string&quot;:&quot;%q&quot;,&quot;partn    er&quot;:&quot;%{Referer}i&quot;,&quot;AgentVersion&quot;:&quot;%{User-Agent}i&quot;}"/>

##保存退出&&重启服务&&查看日志

systemctl restart tomcat

tail -f /var/log/tomcat/localhost_access_log.2020-09-05.txt

#修改filebeat.yml配置文件

vim /etc/filebeat/filebeat.yml

#在filebeat.inputs:下增加以下配置

##############tomcat##############

- type: log

  enabled: true

  paths:

    - /var/log/tomcat/localhost_access_log.*.txt

  json.keys_under_root: true

  json.overwrite_keys: true

  tags: ["tomcat"]

  #filebeat.outputs:下增加以下配置

    - index: "tomcat-access-%{[beat.version]}-%{+yyyy.MM}"

      when.contains:

        tags: "tomcat"

  #重启服务即可查看到

  systemctl restart filebeat.service

八、ELK收集docker日志

安装docker

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo

sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo

yum install docker-ce -y

systemctl start docker

#添加阿里云仓库加速,每个人都可以自己到阿里云官网获取自己的加速registry-mirrors

tee /etc/docker/daemon.json <<-'EOF'

{

  "registry-mirrors": ["https://76rdsfoe.mirror.aliyuncs.com"]

}

EOF

systemctl daemon-reload

systemctl restart docker

#登录docker(阿里云-》容器镜像服务-》访问凭证,该路径下设定固定密码,用作登录docker)

sudo docker login --username=jeffii registry.cn-hangzhou.aliyuncs.com

#紧接着,输入密码你刚设置的密码即可。若一下拉取镜像时提示connect refused的话,可重新登录下docker

#拉取ng镜像

docker pull nginx

docker run --name nginx -p 80:80 -d nginx

docker ps

docker logs -f nginx

九、配置filebeat收集单个docker日志

#获取容器id

/var/lib/docker/containers/

#编辑filebeat.yml配置文件

filebeat.inputs:

- type: docker

  containers.ids:

    - 'e5e90adc1871e0689f5346fac071db90cb462941c8ff4444ceecaec5772bbafa'

  tags: ["docker-nginx"]

output.elasticsearch:

  hosts: ["172.20.26.204:9200"]

  index: "docker-nginx-%{[beat.version]}-%{+yyyy.MM}"

setup.template.name: "docker"

setup.template.pattern: "docker-*"

setup.template.enabled: false

setup.template.overwrite: true

十、modules日志收集

官方参考:

https://www.elastic.co/guide/en/beats/filebeat/6.4/configuration-filebeat-modules.html

十一、使用redis作为缓存收集日志

1、redis安装

复制代码#配置epel源

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

#安装redis

yum install redis -y

#修改redis配置文件

vim /etc/redis.conf

bind 172.20.26.204

#启动redis服务

systemctl start redis

2、修改filebeat的配置文件

复制代码#把nginx的日志格式改为json

#修改filebeat的主配置文件

vim /etc/filebeat/filebeat.yml

filebeat.inputs:

- type: log

  enabled: true

  paths:

    - /var/log/nginx/access.log

  json.keys_under_root: true

  json.overwrite_keys: true

  tags: ["access"]

- type: log

  enabled: true

  paths:

    - /var/log/nginx/error.log

  tags: ["error"]

output.redis:

  hosts: ["172.20.26.204"]

  keys:

    - key: "nginx_access"

      when.contains:

        tags: "access"

    - key: "nginx_error"

      when.contains:

        tags: "error"

setup.template.name: "nginx"

setup.template.pattern: "nginx_*"

setup.template.enabled: false

setup.template.overwrite: true

#重启filebeat服务

systemctl restart filebeat

3、检查redis能否收集日志

复制代码#连接redis

redis-cli -h 172.20.26.204

#使用命令检查

172.20.26.204:6379> keys *

1) "nginx_access"

172.20.26.204:6379> LLEN nginx_access

(integer) 18

172.20.26.204:6379> type nginx_access

list

172.20.26.204:6379> LRANGE nginx_access 1 18

 1) "{\"@timestamp\":\"2020-09-06T09:46:56.057Z\",\"@metadata\":{\"beat\":\"filebeat\",\"type\":\"doc\",\"version\":\"6.4.2\"},\"source\":\"/var/log/nginx/access.log\",\"offset\":21682,\"tags\":[\"access\"],\"prospector\":{\"type\":\"log\"},\"beat\":{\"name\":\"localhost\",\"hostname\":\"localhost\",\"version\":\"6.4.2\"},\"json\":{},\"message\":\"192.168.88.102 - - [06/Sep/2020:17:46:50 +0800] \\\"GET / HTTP/1.1\\\" 304 0 \\\"-\\\" \\\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\\\" \\\"-\\\"\",\"input\":{\"type\":\"log\"},\"host\":{\"name\":\"localhost\"}}"

十二、使用Kafka做缓存收集日志

结构图

kafka原理图

kafka是分布式发布-订阅消息系统

zookeeper:存储了一些关于 consumer 和 broker 的信息

producer 直接连接 Broker

zookeeper:保存了topic相关配置,例如topic列表,每个topic的 partition数量、副本的位置,这些分区信息及与Broker的对应关系所有, topic的访问控制信息也是由zookeeper维护的,记录消息分区与consumer之间的关系

broker:多个broker,其中一个会被选举为控制器。从多个broker中选出控制器,这个工作就是zookeeper负责的控制器负责管理整个集群所有分区和副本的控制,例如某个分区的leader故障了,控制器会选择新的leader

Producer:直接连接Broker

partition:一个topic可以分为多个partion,每个partion是一个有序的队列。

Broker:缓存代理,kafka集群中的一台或多台服务器统称broker,存储topic

topic:kafka处理资源的消息源(feeds of messages)的不同分类

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/663846.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TimePicker组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之TimePicker组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 编辑 二、TimePicker组件 TextClock组件通过文本将当前系统时间显示在设备上。…

华为配置使用SNMPv1与网管通信示例

配置使用SNMPv1与网管通信示例 组网图形 图1 配置使用SNMPv1与网管通信组网图 SNMP简介配置注意事项组网需求配置思路操作步骤配置文件 SNMP简介 简单网络管理协议SNMP&#xff08;Simple Network Management Protocol&#xff09;是广泛应用于TCP/IP网络的网络管理标准协议。S…

AJAX-接口文档

接口文档&#xff1a;由后端提供的描述接口的文章 接口&#xff1a;使用AJAX和服务器通讯时&#xff0c;使用的URL&#xff0c;请求方法&#xff0c;以及参数 1.请求参数的位置为query&#xff08;查询&#xff09;的时候&#xff0c;就说明要使用params写为查询参数 2.请求参…

神经网络 | 基于多种神经网络模型的轴承故障检测

Hi&#xff0c;大家好&#xff0c;我是半亩花海。本文主要源自《第二届全国技能大赛智能制造工程技术项目比赛试题&#xff08;样题&#xff09; 模块 E 工业大数据与人工智能应用》&#xff0c;基于给出的已知轴承状态的振动信号样本&#xff0c;对数据进行分析&#xff0c;建…

PDF中公式转word

效果&#xff1a;实现pdf中公式免编辑 step1: 截图CtrlAltA&#xff0c;复制 step2: SimpleTex - Snip & Get 网页或客户端均可&#xff0c;无次数限制&#xff0c;效果还不错。还支持手写、文字识别 单张图片&#xff1a;选 手写板 step3: 导出结果选择 注&#xff1a;…

pdmodel从动态模型转成静态onnx

1.下载项目 git clone https://github.com/jiangjiajun/PaddleUtils.git 2.新建两个新的文件夹 第一个文件夹放两个必要文件 第二个文件夹可以设置为空&#xff0c;用来存放转换后的模型 如图&#xff1a; 3.在终端运行 python paddle/paddle_infer_shape.py --model_dir …

谷粒商城【成神路】-【4】——分类维护

目录 1.删除功能的实现 2.新增功能的实现 3.修改功能的实现 4.拖拽功能 1.删除功能的实现 1.1逻辑删除 逻辑删除&#xff1a;不删除数据库中真实的数据&#xff0c;用指定字段&#xff0c;显示的表示是否删除 1.在application.yml中加入配置 mybatis-plus:global-config:…

【PostgreSQL内核学习(二十五) —— (DBMS存储空间管理)】

DBMS存储空间管理 概述块&#xff08;或页面&#xff09;PageHeaderData 结构体HeapTupleHeaderData 结构 表空间表空间的作用&#xff1a;表空间和数据库关系表空间执行案例 补充 —— 模式&#xff08;Schema&#xff09; 声明&#xff1a;本文的部分内容参考了他人的文章。在…

【红包封面发放+微信红包封面制作教程】小黑猫祝大家小年快乐~

今年终于成功获得了微信红包封面~是我们家的小黑猫&#xff0c;嘿嘿。 封面获取方式 一共还有600份&#xff0c;数量有限&#xff0c;大家想要的话请关注文末的公众号&#xff0c;访问红包封面相关的推文获取~ 平时公众号主要发布一些技术类工具知识&#xff0c;希望能帮到大…

Vue2+ElementUI 弹窗全局拖拽 支持放大缩小

拖拽组件 dialogDrag.vue <template><div></div> </template> <script>export default {name: dialogDrag,data() {return {originalWidth: null,originalHeight: null}},created() {this.$nextTick(()>{this.dialogDrag()})},mounted() {}…

cesium-场景出图场景截屏导出图片或pdf

cesium把当前的场景截图&#xff0c;下载图片或pdf 安装 npm install canvas2image --save npm i jspdf -S 如果安装的插件Canvas2Image不好用&#xff0c;可自建js Canvas2Image.js /*** covert canvas to image* and save the image file*/ const Canvas2Image (function…

无人机激光雷达标定板

机载激光雷达标定板是用于校准和验证机载激光雷达系统的设备。由于机载激光雷达系统在测量地形、建筑物和植被等方面具有广泛的应用&#xff0c;因此标定板的使用对于确保测量结果的准确性和可靠性至关重要。 标定板通常由高反射率的材料制成&#xff0c;如镀金的玻璃或陶瓷&am…

计算机网络实验五

目录 实验五 路由器基本配置 1、实验目的 2、实验设备 3、网络拓扑及IP地址分配 4、实验过程 &#xff08;1&#xff09;路由器设备名称的配置 &#xff08;2&#xff09;路由器每日提示信息配置 &#xff08;3&#xff09;路由器端口的IP地址配置 &#xff08;4&…

Docker 阿里云镜像仓库CR使用实践

一、使用容器镜像&#xff0c;查看镜像&#xff0c;创建&#xff0c;推送&#xff0c;拉取阿里云镜像 CR镜像管理&#xff08;阿里云容器镜像服务&#xff08;Container Registry&#xff09;&#xff09; 登录实例 未创建的镜像名称也可以push、docker的私有仓库需要提起创建…

微信小程序新手入门教程二:认识JSON配置文件

在上一篇我们介绍了微信小程序的注册和基本使用方式&#xff0c;并且写出了一个简单的页面&#xff0c;但是依然没有解释目录中的各种.json文件是做什么的。这篇我们就来认识一下各种JSON配置文件及其配置项。 一 认识JSON 首先先来认识一下JSON是什么。 JSON 指的是 JavaScri…

航道大数据应用专项研究报告(附下载)

总体目标 充分认识航道大数据对行业治理的重要性和必要性&#xff0c;航道大数据的开发和利用是建设智慧航道的基础。基于大数据的航道管理体系&#xff0c;实现了现有数据的梳理和汇聚&#xff0c;跨部门数据的交换和整合&#xff0c;建立了数据关联和深度学习的模型机制&…

网络异常案例六_IP冲突

问题现象 同一个局域网下&#xff0c;一个路由器带几十台终端设备&#xff0c;存在终端设备获取到了相同IP的场景。该路由器也是DHCP Server。 有两个设备终端&#xff0c;都显示获取到了192.168.11.177这个ip。 抓包分析 抓包过程中&#xff0c;看到的一些问题。 ps&#x…

​(三)hadoop之hive的搭建1

下载 访问官方网站https://hive.apache.org/ 点击downloads 点击Download a release now! 点击https://dlcdn.apache.org/hive/ 选择最新的稳定版 复制最新的url 在linux执行下载命令 wget https://dlcdn.apache.org/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz 2.解压…

第十一篇【传奇开心果系列】Python的OpenCV技术点案例示例:三维重建

传奇开心果短博文系列 系列短博文目录Python的OpenCV技术点案例示例系列 短博文目录一、前言二、OpenCV三维重建介绍三、基于区域的SGBM示例代码四、BM&#xff08;Block Matching&#xff09;算法介绍和示例代码五、基于能量最小化的GC&#xff08;Graph Cut&#xff09;算法介…

linux 组建和卸载raid1、raid0详细操作

组raid的最好是相同容量和型号的硬盘&#xff0c;否则会有木桶效应 linux下组raid有很多细节 一、安装raid软件 deb包 apt-get install mdadm或dnf包 dnf install mdadm二、组raid1-镜像&#xff0c;组raid0-并列 raid1和raid0只有在madam命令时一点点不同&#xff0c;其他…