首页 > 系统相关 >Linux搭建ELK-7.5.1分布式集群并且配置X-Pack

Linux搭建ELK-7.5.1分布式集群并且配置X-Pack

时间:2022-12-30 16:35:54浏览次数:55  
标签:ELK elk local Linux redis usr 7.5 root localhost

ELK介绍

需求背景

业务发展越来越庞大,服务器越来越多

各种访问日志、应用日志、错误日志量越来越多,导致运维人员无法很好的去管理日志

开发人员排查问题,需要到服务器上查日志,不方便

运营人员需要一些数据,需要我们运维到服务器上分析日志

为什么要用到ELK?

一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大也就是日志量多而复杂的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。

大型系统通常都是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。

一个完整的集中式日志系统,需要包含以下几个主要特点:

1)收集-能够采集多种来源的日志数据;

2)传输-能够稳定的把日志数据传输到中央系统;

3)存储-如何存储日志数据;

4)分析-可以支持 UI 分析;

5)警告-能够提供错误报告,监控机制;

而ELK则提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。是目前主流的一种日志系统。

ELK简介

ELK是三个开源软件的缩写,分别为:Elasticsearch 、 Logstash以及Kibana , 它们都是开源软件。不过现在还新增了一个Beats,它是一个轻量级的日志收集处理工具(Agent),Beats占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具,目前由于原本的ELK Stack成员中加入了 Beats 工具所以已改名为Elastic Stack。

Elastic Stack包含:

Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

详细可参考Elasticsearch权威指南

Logstash主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。

Kibana也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。

Beats在这里是一个轻量级日志采集器,其实Beats家族有6个成员,早期的ELK架构中使用Logstash收集、解析日志,但是Logstash对内存、cpu、io等资源消耗比较高。相比 Logstash,Beats所占系统的CPU和内存几乎可以忽略不计

ELK Stack (5.0版本之后)--> Elastic Stack == (ELK Stack + Beats)。目前Beats包含六种工具:

Packetbeat:网络数据(收集网络流量数据)

Metricbeat:指标 (收集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)

Filebeat:日志文件(收集文件数据)

Winlogbeat:windows事件日志(收集 Windows 事件日志数据)

Auditbeat:审计数据 (收集审计日志)

Heartbeat:运行时间监控 (收集系统运行时的数据)

ELK官网:https://www.elastic.co/cn/

中文指南:https://www.gitbook.com/book/chenryn/elk-stack-guide-cn/details

ELK架构图:

Linux搭建ELK-7.5.1分布式集群并且配置X-Pack_Elastic

环境准备(集群节点分配)

主机名称

IP地址

操作系统

服务器配置

角色

master

172.168.1.157

CentOS 7.8

8vCPU 16GB

ES节点1

node1

172.168.1.158

CentOS 7.8

8vCPU 16GB

ES节点2

node2

172.168.1.159

CentOS 7.8

8vCPU 16GB

ES节点3

Logstash

172.168.1.248

CentOS 7.8

8vCPU 16GB

Logstash解析日志

Filebeat

172.168.1.248

CentOS 7.8

8vCPU 16GB

Filebeat收集日志

Kibana

172.168.1.248

CentOS 7.8

8vCPU 16GB

Kibana节点

Redis

172.168.1.248

CentOS 7.8

8vCPU 16GB

Redis缓存数据库

Nginx

172.168.1.248

CentOS 7.8

8vCPU 16GB

Web服务器

软件版本

Elasticsearch:elasticsearch-7.5.1-linux-x86_64.tar.gz

Kibana:kibana-7.5.1-linux-x86_64.tar.gz

Logstash:logstash-7.5.1.tar.gz

Filebeat:filebeat-7.5.1-linux-x86_64.tar.gz

JDK:jdk-11.0.1_linux-x64_bin.tar.gz

Redis:redis-5.0.7.tar.gz

Nginx:nginx-1.18.0.tar.gz

一、基础环境配置

注:所有ES节点都需要执行

1、关闭防火墙和selinux

[root@localhost ~]# systemctl stop firewalld

[root@localhost ~]# systemctl disable firewalld

[root@localhost ~]# setenforce 0

[root@localhost ~]# sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config

2、内核优化

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

# 在文件最后添加以下内容


  1. * soft nofile 65537
  2. * hard nofile 65537
  3. * soft nproc 65537
  4. * hard nproc 65537

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

# 配置以下内容


  1. * soft nproc 4096

[root@localhost ~]# vim /etc/sysctl.conf

# 配置以下内容


  1. net.ipv4.tcp_max_syn_backlog = 65536
  2. net.core.netdev_max_backlog = 32768
  3. net.core.somaxconn = 32768
  4. net.core.wmem_default = 8388608
  5. net.core.rmem_default = 8388608
  6. net.core.rmem_max = 16777216
  7. net.core.wmem_max = 16777216
  8. net.ipv4.tcp_timestamps = 0
  9. net.ipv4.tcp_synack_retries = 2
  10. net.ipv4.tcp_syn_retries = 2
  11. net.ipv4.tcp_tw_recycle = 1
  12. net.ipv4.tcp_tw_reuse = 1
  13. net.ipv4.tcp_mem = 94500000 915000000 927000000
  14. net.ipv4.tcp_max_orphans = 3276800
  15. net.ipv4.tcp_fin_timeout = 120
  16. net.ipv4.tcp_keepalive_time = 120
  17. net.ipv4.ip_local_port_range = 1024 65535
  18. net.ipv4.tcp_max_tw_buckets = 30000
  19. fs.file-max=655350
  20. vm.max_map_count = 262144
  21. net.core.somaxconn= 65535
  22. net.ipv4.ip_forward = 1
  23. net.ipv6.conf.all.disable_ipv6=1

# 执行sysctl -p命令使其生效

[root@localhost ~]# sysctl –p

3、安装JDK环境

[root@localhost ~]# wget https://mirrors.yangxingzhen.com/jdk/jdk-11.0.1_linux-x64_bin.tar.gz

[root@localhost ~]# tar zxf jdk-11.0.1_linux-x64_bin.tar.gz -C /usr/local

# 配置环境变量,添加以下内容

[root@localhost ~]# vim /etc/profile


  1. export JAVA_HOME=/usr/local/jdk-11.0.1
  2. export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
  3. export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin

[root@localhost ~]# source /etc/profile

# 看到如下信息,java环境配置成功

[root@localhost ~]# java -version

java version "11.0.1" 2018-10-16 LTS

Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)

Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)

4、创建ELK用户

[root@localhost ~]# useradd elk

5、配置hosts文件

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


  1. 172.168.1.157 master
  2. 172.168.1.158 node1
  3. 172.168.1.159 node2

6)配置主机名

# Master主机

[root@localhost ~]# hostnamectl set-hostname master

# Node1主机

[root@localhost ~]# hostnamectl set-hostname node1

# Node2主机

[root@localhost ~]# hostnamectl set-hostname node2

二、安装Elasticsearch分布式集群

# Master节点上操作

1、下载Elasticsearch软件包

[root@master ~]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.5.1-linux-x86_64.tar.gz

2、解压并重命名

[root@master ~]# tar xf elasticsearch-7.5.1-linux-x86_64.tar.gz

[root@master ~]# mv elasticsearch-7.5.1 /usr/local/elasticsearch

3、创建持久化目录及logs日志目录

[root@master ~]# mkdir -p /data/elasticsearch/{data,logs}

4、修改elasticsearch.yml配置文件,文件内容如下

[root@master ~]# vim /usr/local/elasticsearch/config/elasticsearch.yml


  1. # 集群名称
  2. cluster.name: es-cluster
  3. # 节点名称
  4. node.name: master
  5. # 存放数据目录,先创建该目录
  6. path.data: /data/elasticsearch/data
  7. # 存放日志目录,先创建该目录
  8. path.logs: /data/elasticsearch/logs
  9. # 节点IP
  10. network.host: master
  11. # tcp端口
  12. transport.tcp.port: 9300
  13. # http端口
  14. http.port: 9200
  15. # 服务发现节点列表,若有多个节点,则节点进行对应的配置
  16. discovery.seed_hosts: ["master:9300","node1:9300","node2:9300"]
  17. # 初始主节点
  18. cluster.initial_master_nodes: ["master","node1","node2"]
  19. # 候选节点数
  20. gateway.recover_after_nodes: 2
  21. # 心跳超时时间
  22. discovery.zen.ping_timeout: 60s
  23. # 节点检测时间
  24. discovery.zen.fd.ping_interval: 120s
  25. # ping 超时时间
  26. discovery.zen.fd.ping_timeout: 120s
  27. discovery.zen.fd.ping_retries: 3
  28. # 是否允许作为主节点
  29. node.master: true
  30. # 是否保存数据
  31. node.data: true
  32. node.ingest: false
  33. node.ml: false
  34. cluster.remote.connect: false
  35. # 跨域
  36. http.cors.enabled: true
  37. http.cors.allow-origin: "*"

# 配置JVM参数,最大不要超过32G,并且留一半内存给操作系统,默认是1g,这里分配4G

[root@master ~]# sed -i -e 's/-Xms1g/-Xms4g/' -e 's/-Xmx1g/-Xmx4g/' /usr/local/elasticsearch/config/jvm.options

5、拷贝Elasticsearch安装目录、Elasticsearch数据目录到node1和node2主机

[root@master ~]# scp -r /usr/local/elasticsearch/ root@node1:/usr/local/

[root@master ~]# scp -r /usr/local/elasticsearch/ root@node2:/usr/local/

[root@master ~]# scp -r /data/elasticsearch/ root@node1:/data/

[root@master ~]# scp -r /data/elasticsearch/ root@node2:/data/

注意:Node1节点跟Node2节点只需修改节点名称和本地IP地址即可

# 节点Node1的修改

# 节点名称

node.name: node1

# 节点IP

network.host: 172.168.1.158

# 节点Node2的修改

# 节点名称

node.name: node2

# 节点IP

network.host: 172.168.1.159

6、ELK用户授权

# Master节点

[root@master ~]# chown -R elk.elk /usr/local/elasticsearch/

[root@master ~]# chown -R elk.elk /data/elasticsearch/*

# Node1节点

[root@node1 ~]# chown -R elk.elk /usr/local/elasticsearch/

[root@node1 ~]# chown -R elk.elk /data/elasticsearch/*

# Node2节点

[root@node2 ~]# chown -R elk.elk /usr/local/elasticsearch/

[root@node2 ~]# chown -R elk.elk /data/elasticsearch/*

7、启动Elasticsearch服务(第一次先测试好然后再加-d后台启动)

[root@master ~]# su - elk

[elk@master ~]$ /usr/local/elasticsearch/bin/elasticsearch

8、后台启动Elasticsearch服务

[elk@master ~]$ /usr/local/elasticsearch/bin/elasticsearch -d

9、查询ES的集群状态

# 第一种

[elk@master ~]$ curl -XGET 'http://172.168.1.157:9200/_cat/nodes'

172.168.1.158 29 26 0 0.05 0.03 0.05 dm - node1

172.168.1.159 19 32 0 0.00 0.01 0.05 dm - node2

172.168.1.157 28 40 0 0.00 0.01 0.05 dm * master

[elk@master ~]$ curl -XGET 'http://172.168.1.158:9200/_cat/nodes'

172.168.1.158 29 26 0 0.05 0.03 0.05 dm - node1

172.168.1.157 28 40 0 0.00 0.01 0.05 dm * master

172.168.1.159 19 32 0 0.00 0.01 0.05 dm - node2

[elk@master ~]$ curl 'http://172.168.1.159:9200/_cat/nodes'

172.168.1.158 30 26 0 0.04 0.03 0.05 dm - node1

172.168.1.159 19 32 0 0.00 0.01 0.05 dm - node2

172.168.1.157 29 40 0 0.00 0.01 0.05 dm * master

# 带*号的是通过选举出来的master

# 第二种

[elk@master ~]$ curl -X GET 'http://172.168.1.157:9200/_cluster/health?pretty'

{

"cluster_name" : "es-cluster",

"status" : "green",

"timed_out" : false,

"number_of_nodes" : 3,

"number_of_data_nodes" : 3,

"active_primary_shards" : 1,

"active_shards" : 2,

"relocating_shards" : 0,

"initializing_shards" : 0,

"unassigned_shards" : 0,

"delayed_unassigned_shards" : 0,

"number_of_pending_tasks" : 0,

"number_of_in_flight_fetch" : 0,

"task_max_waiting_in_queue_millis" : 0,

"active_shards_percent_as_number" : 100.0

}

10、配置SSL并启用X-Pack

10.1、X-pack是什么?

X-Pack是Elastic Stack扩展功能,提供安全性,警报,监视,报告,机器学习和许多其他功能。ES7.0+之后,默认情况下,当安装Elasticsearch时,会安装X-Pack,无需单独再安装。

自6.8以及7.1+版本之后,基础级安全永久免费。

基础版本安全功能列表如下:

Linux搭建ELK-7.5.1分布式集群并且配置X-Pack_linux_02

X-Pack安全配置的核心四步骤:

1)设置:xpack.security.enabled: true。

2)生成TLS证书。

3)配置加密通信。

4)设置密码。

10.2、生成节点证书

1、证书实现加密通信的原理

TLS需要X.509证书(X.509 证书是一个数字证书,它使用 X.509 公有密钥基础设施标准将公有密钥与证书中包含的身份相关联。X.509 证书由一家名为证书颁发机构 (CA) 的可信实体颁发。CA 持有一个或多个名为 CA 证书的特殊证书,它使用这种证书来颁发 X.509 证书。只有证书颁发机构才有权访问 CA 证书)才能对与之通信的应用程序执行加密和身份验证。为了使节点之间的通信真正安全,必须对证书进行验证。
在Elasticsearch集群中验证证书真实性的推荐方法是信任签署证书的证书颁发机构(CA)。这样,只需要使用由同一CA签名的证书,即可自动允许该节点加入集群。

2、借助elasticsearch-certutil命令生成证书

[elk@master ~]$ cd /usr/local/elasticsearch/bin

[elk@master bin]$ ./elasticsearch-certutil ca -out /usr/local/elasticsearch/config/elastic-certificates.p12 -pass "www.yangxingzhen.com"

3、将证书拷贝到其他节点,放入/usr/local/elasticsearch/config/目录下

[elk@master bin]$ scp ../config/elastic-certificates.p12 root@node1:/usr/local/elasticsearch/config/

[elk@master bin]$ scp ../config/elastic-certificates.p12 root@node2:/usr/local/elasticsearch/config/

# 因为用root用户拷贝,需要授权(不然启动报错)

[root@node1 ~]# chown -R elk.elk /usr/local/elasticsearch/

[root@node2 ~]# chown -R elk.elk /usr/local/elasticsearch/

4、配置加密通信

启用安全功能后,必须使用TLS来确保节点之间的通信已加密。

在elasticsearch.yml中心新增配置如下:(其他节点相同配置)

[elk@master bin]$ vim ../config/elasticsearch.yml


  1. # 配置X-Pack
  2. http.cors.allow-headers: Authorization
  3. xpack.security.enabled: true
  4. xpack.security.transport.ssl.enabled: true
  5. xpack.security.transport.ssl.verification_mode: certificate
  6. xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
  7. xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

5、创建证书时输入了密码,那可以通过下面的方法设置。(所有节点需要执行)

# 输入生成证书的密码即可

[elk@master bin]$ ./elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password

[elk@master bin]$ ./elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password

6、重启Elasticsearch

# 配置为使用TLS的节点无法与使用未加密网络的节点通信(反之亦然)。启用TLS后,必须重新启动所有节点才能保持群集之间的通信。

# 通过查询端口获取PID号

[elk@master bin]$ netstat -lntup |grep 9200

# 杀掉PID号

[elk@master bin]$ kill -9 3337

[elk@master bin]$ /usr/local/elasticsearch/bin/elasticsearch -d

10.3、设置集群密码

# 因为你上面已经做了SSL通信,所以只需要在Master节点上设置用户名和密码就可以了,其他的2个节点就会是相同的用户名密码

# 生成密码有如下两种方式:

auto - 随机生成密码。

interactive - 自定义不同用户的密码。

注意:必须配置好xpack之后,才能设置密码。否则会报错。

# 这里采用自定义密码方式

[elk@master bin]$ /usr/local/elasticsearch/bin/elasticsearch-setup-passwords interactive

注:这里为了方便演示,密码统一设置为www.yangxingzhen.com

Linux搭建ELK-7.5.1分布式集群并且配置X-Pack_Elastic_03

注:配置了密码之后获取集群状态命令如下

[elk@master bin]$ curl --user elastic:www.yangxingzhen.com -X GET 'http://172.168.1.157:9200/_cluster/health?pretty'

Linux搭建ELK-7.5.1分布式集群并且配置X-Pack_Elastic_04

11、Elasticsearch常用命令

curl -XDELETE 'http://172.168.1.157:9200/logstash-*' 删除索引(后面为索引名称)

curl -XGET '172.168.1.157:9200/_cat/health?v&pretty' 查看集群状态

curl -XGET '172.168.1.157:9200/_cat/indices?v&pretty' 查看索引

三、安装Kibana

1、下载Kibana软件包

[root@localhost ~]$ wget https://artifacts.elastic.co/downloads/kibana/kibana-7.5.1-linux-x86_64.tar.gz

2、解压Kibana软件包并重命名

[root@localhost ~]$ tar xf kibana-7.5.1-linux-x86_64.tar.gz

[root@localhost ~]$ mv kibana-7.5.1-linux-x86_64 /usr/local/kibana

3、配置Kibana配置文件

[root@localhost ~]$ vim /usr/local/kibana/config/kibana.yml

#配置内容如下


  1. # 配置kibana的端口
  2. server.port: 5601
  3. # 配置监听ip
  4. server.host: "172.168.1.248"
  5. # 配置es服务器的ip,如果是集群则配置该集群中主节点的ip
  6. elasticsearch.hosts: ["http://172.168.1.157:9200"]
  7. elasticsearch.username: "elastic"
  8. elasticsearch.password: "www.yangxingzhen.com"
  9. # 配置kibana的日志文件路径,不然默认是messages里记录日志
  10. logging.dest: /usr/local/kibana/logs/kibana.log
  11. # 配置为中文
  12. i18n.locale: "zh-CN"

4、创建日志目录并授权

[root@localhost ~]# mkdir /usr/local/kibana/logs

[root@localhost ~]# chown -R elk.elk /usr/local/kibana/

5、启动Kibana服务

[root@localhost ~]# su - elk

# 前台启动

[elk@localhost ~]$ /usr/local/kibana/bin/kibana

# 后台启动

[elk@localhost ~]$ /usr/local/kibana/bin/kibana &

温馨提示:可以先前台启动查看日志,正常之后在后台启动。

四、安装Redis

1、下载Redis包

[root@localhost ]# wget -c http://download.redis.io/releases/redis-5.0.7.tar.gz

2、解压安装配置Redis

[root@localhost ]# tar zxf redis-5.0.7.tar.gz

[root@localhost ]# mv redis-5.0.7 /usr/local/redis

[root@localhost ]# cd /usr/local/redis/

[root@localhost ]# make

3、创建数据存放目录

[root@localhost redis]# mkdir -p /data/redis

4、配置Redis

# 随机生成密码

[root@localhost redis]# openssl rand -hex 12

c710403c3c97ac97a269d7a6

[root@localhost redis]# ln -sf /usr/local/redis/src/redis-* /usr/bin

[root@localhost redis]# sed -i "s/127.0.0.1/0.0.0.0/g" /usr/local/redis/redis.conf

[root@localhost redis]# sed -i "/daemonize/s/no/yes/" /usr/local/redis/redis.conf

[root@localhost redis]# sed -i "s/dir .*/dir \/data\/redis/" /usr/local/redis/redis.conf

[root@localhost redis]# sed -i "s/logfile .*/logfile \/usr\/local\/redis\/redis.log/" /usr/local/redis/redis.conf

[root@localhost redis]# sed -i '/appendonly/s/no/yes/' /usr/local/redis/redis.conf

[root@localhost redis]# sed -i "s/# requirepass foobared/requirepass c710403c3c97ac97a269d7a6/" /usr/local/redis/redis.conf

[root@localhost redis]# echo never > /sys/kernel/mm/transparent_hugepage/enabled

[root@localhost redis]# sysctl vm.overcommit_memory=1

5、创建systemctl管理配置文件

[root@localhost redis]# vim /usr/lib/systemd/system/redis.service

# 配置内容如下


  1. [Unit]
  2. Description=Redis Server
  3. After=network-online.target remote-fs.target nss-lookup.target
  4. Wants=network-online.target

  5. [Service]
  6. Type=forking
  7. ExecStart=/usr/bin/redis-server /usr/local/redis/redis.conf
  8. ExecStop=/usr/bin/redis-cli -h 127.0.0.1 -p 6379 shutdown
  9. User=root
  10. Group=root

  11. [Install]
  12. WantedBy=multi-user.target

6)启动Redis服务

[root@localhost redis]# systemctl daemon-reload

[root@localhost redis]# systemctl enable redis

[root@localhost redis]# systemctl start redis

7)查询端口及进程

[root@localhost redis]# netstat -lntup |grep 6379

[root@localhost redis]# systemctl status redis

五、安装Nginx

1)安装依赖软件

[root@localhost ~]# yum -y install make zlib zlib-devel gcc-c++ libtool pcre pcre-devel openssl openssl-devel wget

2)下载Nginx源码包

[root@localhost ~]# wget -c http://nginx.org/download/nginx-1.18.0.tar.gz

3)解压Nginx源码包

[root@localhost ~]# tar zxf nginx-1.18.0.tar.gz

4)进入解压目录,预编译Nginx

[root@localhost ~]# cd nginx-1.18.0

[root@localhost nginx-1.18.0]# useradd -s /sbin/nologin www

[root@localhost nginx-1.18.0]# ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-stream

5)编译和安装Nginx

[root@localhost nginx-1.18.0]# make && make install

6)检测配置或安装是否成功:

[root@localhost nginx-1.18.0]# /usr/local/nginx/sbin/nginx -t

如果出现下列信息,则表示安装或配置成功。

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

7)配置Nginx.conf

[root@localhost nginx-1.18.0]# vim /usr/local/nginx/conf/nginx.conf


  1. user www www;
  2. worker_processes auto;
  3. pid /usr/local/nginx/logs/nginx.pid;
  4. events {
  5. use epoll;
  6. worker_connections 10240;
  7. multi_accept on;
  8. }
  9. http {
  10. include mime.types;
  11. default_type application/octet-stream;
  12. log_format json '{"@timestamp":"$time_iso8601",'
  13. '"host":"$server_addr",'
  14. '"clientip":"$remote_addr",'
  15. '"remote_user":"$remote_user",'
  16. '"request":"$request",'
  17. '"http_user_agent":"$http_user_agent",'
  18. '"size":$body_bytes_sent,'
  19. '"responsetime":$request_time,'
  20. '"upstreamtime":"$upstream_response_time",'
  21. '"upstreamhost":"$upstream_addr",'
  22. '"http_host":"$host",'
  23. '"requesturi":"$request_uri",'
  24. '"url":"$uri",'
  25. '"domain":"$host",'
  26. '"xff":"$http_x_forwarded_for",'
  27. '"referer":"$http_referer",'
  28. '"status":"$status"}';
  29. access_log logs/access.log json;
  30. error_log logs/error.log warn;
  31. sendfile on;
  32. tcp_nopush on;
  33. keepalive_timeout 120;
  34. tcp_nodelay on;
  35. server_tokens off;
  36. gzip on;
  37. gzip_min_length 1k;
  38. gzip_buffers 4 64k;
  39. gzip_http_version 1.1;
  40. gzip_comp_level 4;
  41. gzip_types text/plain application/x-javascript text/css application/xml;
  42. gzip_vary on;
  43. client_max_body_size 10m;
  44. client_body_buffer_size 128k;
  45. proxy_connect_timeout 90;
  46. proxy_send_timeout 90;
  47. proxy_buffer_size 4k;
  48. proxy_buffers 4 32k;
  49. proxy_busy_buffers_size 64k;
  50. large_client_header_buffers 4 4k;
  51. client_header_buffer_size 4k;
  52. open_file_cache_valid 30s;
  53. open_file_cache_min_uses 1;
  54. server {
  55. listen 80;
  56. server_name localhost;
  57. location / {
  58. proxy_pass http://172.168.1.248:5601;
  59. proxy_set_header Host $host;
  60. proxy_set_header X-Real-IP $remote_addr;
  61. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  62. }
  63. }
  64. }

8)创建systemctl管理配置文件

[root@localhost nginx-1.18.0]# vim /usr/lib/systemd/system/nginx.service


  1. [Unit]
  2. Description=Nginx Server
  3. Documentation=http://nginx.org/en/docs/
  4. After=network-online.target remote-fs.target nss-lookup.target
  5. Wants=network-online.target

  6. [Service]
  7. Type=forking
  8. PIDFile=/usr/local/nginx/logs/nginx.pid
  9. ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
  10. ExecReload=/bin/kill -s HUP $MAINPID
  11. ExecStop=/bin/kill -s TERM $MAINPID

  12. [Install]
  13. WantedBy=multi-user.target

9)启动Nginx服务

[root@localhost ~]# systemctl daemon-reload

[root@localhost ~]# systemctl enable nginx

[root@localhost ~]# systemctl start nginx

六、安装Filebeat

1、下载Filebeat软件包

[root@localhost ~]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.5.1-linux-x86_64.tar.gz

2、解压并重命名

[root@localhost ~]# tar xf filebeat-7.5.1-linux-x86_64.tar.gz

[root@localhost ~]# mv filebeat-7.5.1-linux-x86_64 /usr/local/filebeat

3、编辑filebeat.yml配置文件,配置内容如下

[root@localhost ~]# vim /usr/local/filebeat/filebeat.yml


  1. #========= Filebeat inputs ==========
  2. filebeat.inputs:
  3. - type: log
  4. enabled: true
  5. paths:
  6. - /usr/local/nginx/logs/access.log
  7. multiline:
  8. pattern: '^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}'
  9. negate: true
  10. match: after
  11. fields:
  12. logtype: nginx_access
  13. - type: log
  14. enabled: true
  15. paths:
  16. - /usr/local/nginx/logs/error.log
  17. multiline:
  18. pattern: '^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}'
  19. negate: true
  20. match: after
  21. fields:
  22. logtype: nginx_error
  23. output.redis:
  24. enabled: true
  25. hosts: ["172.168.1.248:6379"]
  26. password: "c710403c3c97ac97a269d7a6"
  27. key: "all-access-log"
  28. db: 0
  29. timeout: 10

4、创建Filebeat日志目录

[root@localhost ~]# mkdir /usr/local/filebeat/logs

[root@localhost ~]# chown -R elk.elk /usr/local/filebeat

5、启动filebeat服务

[root@localhost ~]# su - elk

[elk@localhost ~]# cd /usr/local/filebeat

# 前台启动

[elk@localhost filebeat]$ ./filebeat -e -c filebeat.yml >>logs/filebeat.log

# 后台启动

[elk@localhost filebeat]$ nohup ./filebeat -e -c filebeat.yml >>logs/filebeat.log >/dev/null 2>&1 &

七、安装Logstash

1、下载软件包

[root@localhost ~]# wget https://artifacts.elastic.co/downloads/logstash/logstash-7.5.1.tar.gz

2、解压并重命名

[root@localhost ~]# tar zxf logstash-7.5.1.tar.gz

[root@localhost ~]# mv logstash-7.5.1 /usr/local/logstash

3、创建nginx.conf文件,添加以下内容

[root@localhost ~]# vim /usr/local/logstash/config/nginx.conf


  1. input {
  2. redis {
  3. host => "172.168.1.248"
  4. port => "6379"
  5. db => "0"
  6. password => "c710403c3c97ac97a269d7a6"
  7. data_type => "list"
  8. key => "all-access-log"
  9. codec => json
  10. }
  11. }

  12. filter {
  13. if [fields][logtype] == "nginx_access" {
  14. json {
  15. source => "message"
  16. }

  17. grok {
  18. match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level}" }
  19. }

  20. date {
  21. match => ["timestamp", "yyyy-MM-dd HH:mm:ss,SSS"]
  22. target => "@timestamp"
  23. }
  24. }
  25. if [fields][logtype] == "nginx_error" {
  26. json {
  27. source => "message"
  28. }

  29. grok {
  30. match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level}" }
  31. }

  32. date {
  33. match => ["timestamp", "yyyy-MM-dd HH:mm:ss,SSS"]
  34. target => "@timestamp"
  35. }
  36. }
  37. }

  38. output {
  39. if [fields][logtype] == "nginx_access" {
  40. elasticsearch {
  41. hosts => ["172.168.1.157:9200","172.168.1.158:9200","172.168.1.159:9200"​]
  42. user => "elastic"
  43. password => "www.yangxingzhen.com"
  44. action => "index"
  45. index => "nginx_access.log-%{+YYYY.MM.dd}"
  46. }
  47. }
  48. if [fields][logtype] == "nginx_error" {
  49. elasticsearch {
  50. hosts => ["172.168.1.157:9200","172.168.1.158:9200","172.168.1.159:9200"]
  51. user => "elastic"
  52. password => "www.yangxingzhen.com"
  53. action => "index"
  54. index => "nginx_error.log-%{+YYYY.MM.dd}"
  55. }
  56. }
  57. }

4、启动logstash服务

[root@localhost ~]# chown -R elk.elk /usr/local/logstash

[root@localhost ~]# su - elk

# 前台启动

[elk@localhost ~]$ /usr/local/logstash/bin/logstash -f /usr/local/logstash/conf/elasticsearch.conf

# 后台启动

[elk@localhost ~]$ cd /usr/local/logstash/bin && nohup ./logstash -f /usr/local/logstash/config/elasticsearch.conf >/dev/null 2>&1 &

八、访问Kibana

# 浏览器访问:http://172.168.1.248,出现如下界面

Linux搭建ELK-7.5.1分布式集群并且配置X-Pack_Elastic_05

# 输入前面设置的用户名和密码,出现如下界面

Linux搭建ELK-7.5.1分布式集群并且配置X-Pack_elasticsearch_06

# 选择自己浏览,出现以下界面

Linux搭建ELK-7.5.1分布式集群并且配置X-Pack_elasticsearch_07

Linux搭建ELK-7.5.1分布式集群并且配置X-Pack_linux_08

分别点击管理--》索引管理,这时候就能看到Nginx的索引信息

Linux搭建ELK-7.5.1分布式集群并且配置X-Pack_elasticsearch_09

1)创建Nginx访问日志索引

索引模式--->>创建索引模式,输入索引模式名称,点击下一步

Linux搭建ELK-7.5.1分布式集群并且配置X-Pack_linux_10

Linux搭建ELK-7.5.1分布式集群并且配置X-Pack_Elastic_11

Linux搭建ELK-7.5.1分布式集群并且配置X-Pack_elasticsearch_12

2)创建Nginx错误日志索引

索引模式--->>创建索引模式,输入索引模式名称,点击下一步

Linux搭建ELK-7.5.1分布式集群并且配置X-Pack_elasticsearch_13

Linux搭建ELK-7.5.1分布式集群并且配置X-Pack_Elastic_14

Linux搭建ELK-7.5.1分布式集群并且配置X-Pack_Elastic_15

点击Discover,就能看到日志数据了,如下图

Linux搭建ELK-7.5.1分布式集群并且配置X-Pack_linux_16

至此,ELK分布式集群日志分析平台收集Nginx日志搭建完成。

  • 输入编号:7679,直达文章
  • 输入m|M,直达目录列表

标签:ELK,elk,local,Linux,redis,usr,7.5,root,localhost
From: https://blog.51cto.com/u_12018693/5980618

相关文章

  • Linux下iostat命令详解
    一、iostat命令简介iostat是I/Ostatistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。io......
  • Linux性能分析工具vmstat
    1、vmstat简介vmstat(VirtualMemoryStatistics虚拟内存统计)命令用来显示Linux系统虚拟内存状态,也可以报告关于进程、内存、I/O等系统整体运行状态。vmstat命令报告关......
  • Linux终端小工具之tldr
    在终端上使用各种命令执行重要任务是Linux桌面体验中不可或缺的一部分。Linux这个开源操作系统拥有丰富的命令,任何用户都无法全部记住所有这些命令。而使事情变得更复杂......
  • Linux命令
    date显示系统当前如期和时间ifconfig查看IP地址who查看几个用户在线ls查看当前目录文件夹systemtctl服务名称startstoprestartiptables-L-v-n查看服务器有......
  • SELinux
    selinux的工作模式参考:http://c.biancheng.net/view/3906.htmlDisable(关闭模式)Selinux被关闭,默认的DAC访问控制方式被使用。Permissve(宽容模式)SELinux被启......
  • linux存储设备识别fc模式
    1.环境存储使用fc模式链接到服务器:服务器【QLE2692光纤卡】--光纤交换机【已划zone】--存储【已映射】多路径软件:multipathyuminstalldevice-mapper-multipath/sb......
  • Linux运维工程师 50个常见面试题
    1、请简述OSI七层网络模型有哪些层及各自的含义?物理层:底层数据传输,比如网线、网卡标准数据链路层:定义数据的基本格式,如何传输,如何标识。比如网卡MAC地址网络层:定义IP编码,定......
  • Linux报错:pip: command not found
    问题描述CentOS7下,执行pip提示不存在#系统cat/etc/redhat-releaseCentOSLinuxrelease7.9.2009(Core)#检查python已存在$python-VPython2.7.5#检查pip,......
  • linux回炉第十天
    pvcreate/dev/sdb1vgcreatetest/dev/sdb1lvcreate-L1Gtestlvcreate-l20testlvextend-L2G/dev/test/lvol1vgextendtest/dev/sdb2lvreducevgreducelvremovevgre......
  • [2core]WorkerService在Windows和Linux下部署与运行
    一、概述从.netframework迁移到.netcore,除了要迁移基于asp.net的web程序,还有一个项目也是比较重要的,即服务程序或叫守护进程。在.netcore中创建workerservice程序已经......