Zabbix

zabbix官网:Zabbix:企业级开源监控解决方案

部署手册:下载Zabbix

产品手册:产品手册

当前支持版本

在这里插入图片描述

生命周期

在这里插入图片描述

Zabbix概述

Zabbix 由 Alexei Vladishev 创建,目前由 Zabbix SIA 积极开发和维护。Zabbix

是一款企业级开源分布式监控解决方案。

Zabbix 是一款用于监控网络众多参数、服务器/虚拟机/应用程序/服务/数据库/网站/云平台等健康状态和完整性的软件。 Zabbix 提供灵活的告警机制,允许用户为几乎任何事件配置基于邮件的告警,从而实现对服务器问题的快速响应。基于存储数据, Zabbix 提供出色的报表和数据可视化功能,使其成为容量规划的理想选择。

Zabbix 同时支持轮询和捕获两种方式。所有 Zabbix 报表、统计信息及配置参数均可通过基于 Web 的前端界面访问。该 Web 前端确保您可以从任何位置评估网络状态和服务器健康状况。经过适当配置, Zabbix 可在 IT 基础设施监控中发挥重要作用,无论是对拥有少量服务器的小型组织,还是对拥有众多服务器的大型企业都同样适用。

Zabbix 完全免费。 Zabbix 基于 GNU 通用公共许可证 version 第 2 版编写和分发,这意味着其源代码可自由分发并面向公众开放

zabbix架构

Zabbix由多个主要软件组件构成。各组件职责概述如下。

服务器

Zabbixserver是核心组件,agents向其报告可用性、完整性信息及统计指标。服务器作为中央存储库,保存所有配置数据、统计数据和

运行数据。

数据库存储

所有配置信息以及Zabbix收集的数据均存储在数据库中。

Web 界面

为了从任何地方和任何平台轻松访问Zabbix,系统提供了基于Web的界面。该界面是Zabbix server的一部分,通常(但不一定)运行在与服务器相同的物理机器上。

Proxy

Zabbix proxy可以代表Zabbix server 收集性能和可用性数据。proxy是Zabbix 部署中的可选组件,但它能有效分担单个Zabbix server的负载。

Agent

Zabbixagents被部署在监控目标上,用于主动监控本地资源和应用程序,并将收集到的数据报告给Zabbix服务器。自Zabbix4.4起,有两种类型的agents可用:Zabbix agent(轻量级,支持多种平台,使用C语言编写)和Zabbix agent2(高度灵活,易于通过插件扩展,使用Go 语言编写)。

数据流

此外,退一步审视Zabbix内部整体数据流非常重要。为了create一个收集数据的监控项,你必须先create一个主机。转到Zabbix体系的另一端,你必须先有一个监控项才能create触发器。你必须有一个触发器才能create动作。因此,如果你想收到服务器XCPU负载过高的警报,你必须先为服务器Xcreate一个主机条目,接着创建一个监控其CPU的监控项,然后设置一个在CPU过高时激活的触发器,最后配置一个发送邮件给你的动作。虽然这看起来步骤很多,但通过使用模板功能其实并不复杂。然而,正是这种设计使得create非常灵活的配置成为可能。

搭建LNMP架构

Zabbix基于LNMP架构部署

zabbix-server通过Centos-7-template模板克隆产生

mysql001通过mysql01克隆产生

在这里插入图片描述

安装nginx

#创建nginx的yum源
[root@zabbix-server ~ 10:22:19]#  rm -rf /etc/yum.repos.d/*
[root@zabbix-server ~ 10:23:17]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.huaweicloud.com/artifactory/os-conf/centos/centos-7.repo

[root@zabbix-server ~ 10:28:11]#  wget http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
[root@zabbix-server ~ 10:28:11]# rpm -ivh nginx-release-centos-7-0.el7.ngx.noarch.rpm

# 或
#创建nginx的yum源
[root@zabbix-server ~ 10:29:15]# vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
enabled=1
gpgcheck=0

#安装nginx
[root@zabbix-server ~ 10:32:19]# yum install -y nginx

#开启服务
[root@zabbix-server ~ 10:32:56]# systemctl start nginx
[root@zabbix-server ~ 10:33:15]# systemctl enable nginx

#防火墙添加通过http
[root@zabbix-server ~ 10:33:30]# firewall-cmd --add-service=http --zone=public
success
[root@zabbix-server ~ 10:34:14]# firewall-cmd --add-service=http --zone=public --permanent
success
[root@zabbix-server ~ 10:34:56]# firewall-cmd --reload
success

先测试nginx环境

在这里插入图片描述

安装mariadb

配置yum源

#配置Mariadb10.5 yum源(zabbix6.0必须使用该版本,低版本不支持)
[root@zabbix-server ~ 10:35:09]# vim /etc/yum.repos.d/mariadb.repo
[mariadb]
name = MariaDB
baseurl = https://mirrors.aliyun.com/mariadb/yum/10.6/centos7-amd64/
enabled = 1
gpgcheck = 0

下载mariadb

[root@zabbix-server ~ 10:36:29]# yum install -y mariadb-server mariadb

#开启服务
[root@zabbix-server ~ 10:37:38]# systemctl enable mariadb --now

#设置root密码
[root@zabbix-server ~ 10:37:55]# mysql
MariaDB [(none)]> delete from mysql.user where User='';
Query OK, 2 rows affected (0.003 sec)

MariaDB [(none)]> alter user root@localhost identified by '123456';
Query OK, 0 rows affected (0.001 sec)
连接数据库测试
[root@zabbix-server ~ 10:39:38]# mysql -uroot -p123456
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 10.6.19-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 

安装php

[root@zabbix-server ~ 11:01:54]# yum -y install epel-release
[root@zabbix-server ~ 11:02:18]# sed -i "s/#baseurl/baseurl/g" /etc/yum.repos.d/epel.repo
[root@zabbix-server ~ 11:02:26]# sed -i "s/metalink/#metalink/g" /etc/yum.repos.d/epel.repo
[root@zabbix-server ~ 11:02:40]# sed -i "s@https\?://download.[a-z]*\.\?[a-z]*/pub@https://repo.huaweicloud.com@g" /etc/yum.repos.d/epel.repo

[root@zabbix-server ~ 11:02:56]# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

[root@zabbix-server ~ 11:03:16]# yum -y install php72w php72w-cli php72w-common php72w-devel php72w-embedded php72w-gd php72w-mbstring php72w-pdo php72w-xml php72w-fpm php72w-mysqlnd php72w-opcache php72w-ldap php72w-bcmath
配置nginx支持php
#修改php-fpm配置文件,把apache改为nginx
[root@zabbix-server ~ 11:06:16]# vim /etc/php-fpm.d/www.conf 
  8 user = nginx
 10 group = nginx
 
#配置location,在index中添加index.php。以支持index.php的首页
[root@zabbix-server ~ 11:07:22]# vim /etc/nginx/conf.d/default.conf 
  9         index index.php index.html index.htm;
  
#配置php请求被传送到后端的php-fpm模块,默认情况下php配置块是被注释的,此时去掉注释并修改
#把fastcgi_param中的/scripts改为$document_root。root是配置php程序放置的根目录。
 29     location ~ \.php$ {
 30         root           /usr/share/nginx/html;
 31         fastcgi_pass   127.0.0.1:9000;
 32         fastcgi_index index.php;
 33         fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
 34         include       fastcgi_params;
 35     }
配置php
#修改PHP配置文件
[root@zabbix-server ~ 11:09:41]# vim /etc/php.ini 
202 short_open_tag = On     #支持php短标签
 359 expose_php = Off        #隐藏php版本
 
#以下为zabbix优化配置要求
 368 max_execution_time = 300       #执行时间
 378 max_input_time = 300           #接收数据等待时间
 389 memory_limit = 128M            #每个脚本占用内存
 656 post_max_size = 16M            #POST数据大小
 799 upload_max_filesize = 2M       #上传文件大小
 800 always_populate_raw_post_data = -1  #原来空的,需要添加
 877 date.timezone = Asia/Shanghai  #时区
 
#启动php-fpm服务
[root@zabbix-server ~ 11:13:13]# systemctl enable php-fpm --now

#重启nginx
[root@zabbix-server ~ 11:13:34]# systemctl restart nginx
测试
测试php首页
[root@zabbix-server ~ 11:13:46]# vim /usr/share/nginx/html/info.php
<?php
 phpinfo();
?>

在这里插入图片描述

测试连接数据库
[root@zabbix-server ~ 11:47:19]# vim /usr/share/nginx/html/info.php 
<?php
 $link=mysqli_connect('127.0.0.1','root','root123');
 if ($link) echo "success";
 else echo "fail";
?>
# $link=mysqli_connect('127.0.0.1','root','root123');   设置变量$link,连接数据库
# if ($link) echo "success";                             如果连接上输出success
# else echo "fail";                                     连接不上输出fail

注:mysql_connect扩展自 PHP 5.5.0 起已废弃,改用mysqli或pdo_mysql

在这里插入图片描述

# 创建zabbix用的数据库及账号
[root@zabbix-server ~ 11:47:46]# mysql -uroot -p
MariaDB [(none)]> CREATE DATABASE zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> GRANT all privileges on *.* TO 'zabbix'@'%' IDENTIFIED BY 'zabbix123';
Query OK, 0 rows affected (0.002 sec)

MariaDB [(none)]> GRANT all privileges on *.* TO 'zabbix'@'localhost' IDENTIFIED BY 'zabbix123';
Query OK, 0 rows affected (0.002 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.001 sec)

collate的作用

对于mysql中那些字符类型的列,如VARCHAR,CHAR,TEXT类型的列,都需要有一个COLLATE类型来 告知mysql如何对该列进行排序和比较。COLLATE会影响到ORDER BY语句的顺序,会影响到WHERE条 件中大于小于号筛选出来的结果,会影响DISTINCT、GROUP BY、HAVING语句的查询结果。另外, mysql建索引的时候,如果索引列是字符类型,也会影响索引创建,只不过这种影响我们感知不到。凡是 涉及到字符类型比较或排序的地方,都会和COLLATE有关。

测试连接zaabix数据库

[root@zabbix-server ~ 11:51:56]# vim /usr/share/nginx/html/info.php 
<?php
 $link=mysqli_connect('127.0.0.1','zabbix','zabbix123');
 if ($link) echo "Zabbix数据库连接成功";
 else echo "Zabbix数据库连接失败";
?>

测试

在这里插入图片描述

zabbix-server

导入数据库

#解压
[root@zabbix-server ~ 13:59:26]# tar zxfv zabbix-6.0.6.tar.gz

#导入数据库
#将该目录的数据库导入zabbix数据库
[root@zabbix-server ~ 13:59:39]# cd /root/zabbix-6.0.6/database/mysql/
[root@zabbix-server mysql 14:16:56]# ls
data.sql  double.sql  history_pk_prepare.sql  images.sql  Makefile  Makefile.am  Makefile.in  schema.sql
[root@zabbix-server mysql 13:59:56]# mysql -uroot -p123456 zabbix < schema.sql
[root@zabbix-server mysql 14:00:27]# mysql -uroot -p123456 zabbix < images.sql
[root@zabbix-server mysql 14:00:38]# mysql -uroot -p123456 zabbix < data.sql
[root@zabbix-server mysql 14:01:04]# mysql -uroot -p123456 zabbix < double.sql
[root@zabbix-server mysql 14:01:29]# mysql -uroot -p123456 zabbix < history_pk_prepare.sql

#进入zabbix数据库查看
[root@zabbix-server mysql 14:02:01]# mysql -uroot -p123456
MariaDB [(none)]> use zabbix
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [zabbix]> show tables;
+----------------------------+
| Tables_in_zabbix           |
+----------------------------+
| acknowledges               |
......
| widget_field               |
+----------------------------+
178 rows in set (0.001 sec)
#是178条

安装软件包

#安装zabbix环境包
[root@zabbix-server 14:02:49]# yum install -y mysql-devel pcre-devel openssl-devel zlib-devel libxml2-devel net-snmp-devel net-snmp libssh2-devel OpenIPMI-devel libevent-devel openldap-devel libcurl-devel fping gcc gcc-c++ make

# 创建zabbix用户 -M不创建家目录
[root@zabbix-server ~ 14:04:31]# useradd -s /sbin/nologin -M zabbix

#使得编译器在编译 C 代码时使用 GNU C99 标准
[root@zabbix-server ~ 14:05:02]# export CFLAGS="-std=gnu99"

#执行configure脚本
[root@zabbix-server ~ 14:05:52]# cd zabbix-6.0.6/
[root@zabbix-server zabbix-6.0.6 14:06:19]# ./configure --sysconfdir=/etc/zabbix/ --enable-server --with-mysql --with-net-snmp --with-libxml2 --with-ssh2 --with-openipmi --with-zlib --with-libpthread --with-libevent --with-openssl --with-ldap --with-libcurl --with-libpcre

#安装
[root@zabbix-server zabbix-6.0.6 14:07:05]# make install

#检查版本
[root@zabbix-server zabbix-6.0.6 14:07:47]# zabbix_server --version

修改zabbix-server配置文件

[root@zabbix-server ~ 14:23:01]# vim /etc/zabbix/zabbix_server.conf
38 LogFile=/var/log/zabbix_server.log
123 DBPassword=zabbix123

#创建日志文件并修改属组和属主
[root@zabbix-server ~ 14:25:00]# touch /var/log/zabbix_server.log
[root@zabbix-server ~ 14:25:20]# chown zabbix.zabbix /var/log/zabbix_server.log

#创建并添加systemctl服务管理zabbix-server
[root@zabbix-server ~ 14:25:53]# vim /usr/lib/systemd/system/zabbix-server.service
#添加下面这段话,直接复制      
[Unit]
Description=Zabbix Server with MySQL DB
After=syslog.target network.target mysqld.service

[Service]
Type=simple
ExecStart=/usr/local/sbin/zabbix_server -f
User=zabbix

[Install]
WantedBy=multi-user.target

#启动zabbix
[root@zabbix-server ~ 14:27:14]# systemctl start zabbix-server.service 
[root@zabbix-server ~ 14:27:32]# netstat -ntap |grep 10051
tcp        0      0 0.0.0.0:10051           0.0.0.0:*               LISTEN      15942/zabbix_server 

前端页面复制到站点

#提供网站前面
[root@zabbix-server ~ 14:27:53]# cp -r /root/zabbix-6.0.6/ui/* /usr/share/nginx/html/
[root@zabbix-server ~ 14:28:37]# chown -R nginx:nginx /usr/share/nginx/html/

在这里插入图片描述

在这里插入图片描述

再点下一步

在这里插入图片描述

在这里插入图片描述

再点下一步

在这里插入图片描述

默认登陆用户名:Admin

默认登陆密码:zabbix

在这里插入图片描述

在这里插入图片描述

被监控端

安装agent

通过前面mysql章节的mysql01克隆mysql001

[root@mysql001 ~ 14:51:17]# systemctl stop firewalld
[root@mysql001 ~ 14:51:40]# setenforce 0
#更新CA
[root@mysql001 ~ 14:53:11]# yum update ca-certificates -y

#安装软件包
[root@mysql001 ~ 15:02:21]# rpm -ivh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm
[root@mysql001 ~ 15:02:33]# yum install zabbix-agent2 -y

#启动服务
[root@mysql001 ~ 15:10:42]# systemctl enable zabbix-agent2.service --now

#修改配置文件
[root@mysql001 ~ 15:24:19]# vim /etc/zabbix/zabbix_agent2.conf
 13 PidFile=/var/run/zabbix/zabbix_agent2.pid
 32 LogFile=/var/log/zabbix/zabbix_agent2.log
 43 LogFileSize=0
 82 Server=192.168.108.50           #指向监控服务器
135 ServerActive=192.168.108.50  #指向监控服务器
146 Hostname=mysql001     #名称
283 Include=/etc/zabbix/zabbix_agent2.d/plugins.d/*.conf

#重启服务(先不重启看看配置生效不)
[root@mysql001 zabbix_agent2.d 15:28:06]# systemctl restart zabbix-agent2.service 

zabbix管理

http://192.168.108.50

zabbix首页登录后

监控主机

配置->模板

在这里插入图片描述

定义模板新名称

在这里插入图片描述

再点击添加

在这里插入图片描述

添加数据库信息

$MYSQL.DSN 写被监控端数据库IP

在这里插入图片描述

左侧 配置->主机->创建主机

1.点击群组后面的 选择,勾选Linux server,2.点击模版后面的 选择,再点击主机群组后面的 选择,勾选Templates和MySQl by Zabbix agent 2 plus

被监控主机配置

Inteerfaces: 添加>客户端

端口是10050,是zabbix客户端插件监听端口

点击interfaces下方 添加,添加客户端,客户端IP为192.168.108.51,最后写主机名称:mysql001

添加后直接生成 可用性:绿色正常,一开始灰色等一会

在这里插入图片描述

邮件服务

打开QQ邮箱,账号与安全 > 绑定手机号

在这里插入图片描述

记录授权码

在zabbix-server服务器上安装邮箱服务

[root@zabbix-server ~ 16:09:29]# yum install -y mailx

配置邮箱服务

[root@zabbix-server ~ 16:09:53]# vim /etc/mail.rc
----文件末尾新增---
set from=2683866427@qq.com                         #用自己的邮箱
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=2683866427@qq.com
set smtp-auth-password=lmsbtquhuzhqcage         #用自己的邮箱授权码
set smtp-auth=login
#set smtp-use-starttls 这里是不需要配置的,很多地方没说明,配置了反而会验证失败,所以我注释掉;
set ssl-verify=ignore
set nss-config-dir=/root/.certs     #制定的存放QQ邮箱SSL证书的位置。
set nss-config-dir=/etc/pki/nssdb/

[root@zabbix-server ~ 16:12:22]# chmod -R 775 /etc/pki/nssdb/

因为需要QQ邮箱的SSL证书,所以我们还需要手动的获取QQ邮箱的证书保存到本地指定的目录里以备调用和验证,具体命令如下:

[root@zabbix-server ~ 16:12:41]# mkdir -p /root/.certs/
[root@zabbix-server ~ 16:13:05]# echo -n | openssl s_client -connect smtp.qq.com:465 |sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt
[root@zabbix-server ~ 16:14:34]# certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
[root@zabbix-server ~ 16:14:46]# certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
[root@zabbix-server ~ 16:14:56]# certutil -L -d /root/.certs

为了防止出现前文所说的发送邮件警告提示,还需要进入邮箱SSL证书存放目录 /root/.certs 里执行如下命令:

[root@zabbix-server ~ 16:15:02]# cd /root/.certs/
[root@zabbix-server .certs 16:15:20]# certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt

返回如下提示即可:

Notice: Trust flag u is set automatically if the private key is present.

这是为了信任证书的标记操作。

至此,已经完成了mailx结合QQ邮箱发送系统邮件的部署了,通过命令行发送测试邮件试试吧:

# 执行命令后,进入交互式编辑,输入正文后按 Ctrl+D 结束并发送
[root@zabbix-server ~ 16:15:44]# mailx -s "mail test" 2683866427@qq.com
hahahahah
EOF
#  ctrl+d 退出

前往QQ邮箱查收测试邮件

在这里插入图片描述

创建脚本目录,并重启zabbix服务

[root@zabbix-server ~ 16:35:44]# vim /etc/zabbix/zabbix_server.conf
548 AlertScriptsPath=/usr/lib/zabbix/alertscripts
[root@zabbix-server ~ 16:36:36]# mkdir -p /usr/lib/zabbix/alertscripts
[root@zabbix-server ~ 16:37:08]# chown -R zabbix:zabbix /usr/lib/zabbix/alertscripts/
[root@zabbix-server ~ 16:37:48]# systemctl restart zabbix-server.service 

编写邮件发送脚本

[root@zabbix-server ~ 16:44:29]# vim /usr/lib/zabbix/alertscripts/mailx.sh
#!/bin/bash
#send mail
messages=`echo $3 | tr '\r\n' '\n'`
subject=`echo $2 | tr '\r\n' '\n'`
echo "${messages}" | mail -s "${subject}" $1 >>/tmp/mailx.log 2>&1

权限设置

[root@zabbix-server ~ 16:44:41]# touch /tmp/mailx.log
[root@zabbix-server ~ 16:44:58]# chown -R zabbix.zabbix /tmp/mailx.log
[root@zabbix-server ~ 16:46:37]# chmod +x /usr/lib/zabbix/alertscripts/mailx.sh

测试脚本发送邮件

[root@zabbix-server ~ 16:47:01]# cd /usr/lib/zabbix/alertscripts/
[root@zabbix-server alertscripts 16:51:16]# ./mailx.sh 2683866427@qq.com "hello mailx.sh" "This is test"

已收到邮件

在这里插入图片描述

告警服务

管理->报警媒介类型>创建媒体类型

创建媒体类型

脚本参数

{ALERT.SENDTO}

{ALERT.SUBJECT}

{ALERT.MESSAGE}

在这里插入图片描述

管理->用户

点击Admin进入

类型选择刚刚创建的mail-test

设置完成后点击添加

收件人:填写自己邮箱地址

在这里插入图片描述

一定要进行更新

在这里插入图片描述

配置->动作->Trigger actions

先删除默认动作,然后创建动作

在这里插入图片描述

在这里插入图片描述

选择Linux servers

点击添加

再点击操作

主题 : {TRIGGER.STATUS}:{TRIGGER.NAME}
消息:
告警主机:{HOST.NAME}
告警 IP:{HOST.IP}
告警时间:{EVENT.DATE}-{EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}:{ITEM.VALUE}
事件 ID:{EVENT.ID}

在这里插入图片描述

恢复操作

主题 : {TRIGGER.STATUS}:{TRIGGER.NAME}
消息:
恢复主机:{HOST.NAME}
恢复 IP:{HOST.IP}
恢复时间:{EVENT.DATE}-{EVENT.TIME}
恢复等级:{TRIGGER.SEVERITY}
恢复信息:{TRIGGER.NAME}:{ITEM.VALUE}
恢复 ID:{EVENT.ID}

在这里插入图片描述

最后点击添加

在这里插入图片描述

监视主页面仪表盘

在这里插入图片描述

在被监控端关闭数据库服务

[root@mysql001 ~ 17:02:41]# systemctl stop mysqld

等待一段时间后

在这里插入图片描述

检查接收告警邮件

在这里插入图片描述

ELK企业日志分析系统

概述

前言

日志分析是运维工程师解决系统故障,发现问题的主要手段。日志主要包括系统日志、应用程序日 志和安全日志

系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原 因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。通常,日志被分 散的储存在不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查 阅日志,即繁琐又效率低下。为此,我们可以使用集中化的日志管理,例如:开源的syslog,将所有服务 器上的日志收集汇总。

集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc 等Linux命令能实现检索和统计,但是对于更高要求的查询、排序和统计等,再加上庞大的机器数量,使 用这样的方法依然难免有点力不从心。开源实时日志分析ELK平台能够完美的解决我们上述的问题,ELK 由ElasticSearch、Logstash和Kiabana三个开源工具组成。官方网站:https://www.elastic.co/products

  • Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分 片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
  • Logstash是一个完全开源的工具,它可以对你的日志进行收集、过滤,并将其存储,供以后使用 (如,搜索)。
  • Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供友好的日志分 析Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

ELK工作原理展示图:

【APPServer集群】→→【logstash Agent 采集器】→→【ElasticSearch Cluster】→→【Kibana Server】→→【Browser】

Logstash收集AppServer产生的Log,并存放到ElasticSearch集群中,而Kibana则从ES集群中查询数据 生成图表,再返回给Browser。简单来说,进行日志处理分析,一般需要经过以下几个步骤:

  1. 将日志进行集中化管理(beats)

  2. 将日志格式化(logstash)

  3. 对格式化后的数据进行索引和存储(elasticsearch)

  4. 前端数据的展示(kibana)

知识点概述

核心概念一览

首先,一个简单的类比来帮助你理解它们之间的关系:

想象一下银行系统:

  • Logstash 就像是各地的柜台职员和运钞车。它负责从各个来源(ATM、柜台、网上银行)收集货 币(数据),进行清点、辨别真伪、分类整理(解析和转换),然后运送到总行金库。

  • Elasticsearch 就是银行的巨型、高科技、超高效的金库和归档系统。它不仅安全地存储所有货币 (数据),还建立了一套极其精细的索引。当需要查询时,它能在一瞬间从海量库存中精准地找到任何一张钞票或任何一笔交易记录。

  • Kibana 则是银行的数据分析和监控中心的大屏幕。它连接到金库(Elasticsearch),让管理人员和分析师可以通过各种图表、仪表盘、地图可视化金融趋势、交易流水、风险状况,而不是去面对一堆枯燥的数字表格。

这个系统的核心数据流通常是:

日志/数据源 Logstash(收集、处理) Elasticsearch(存储、索引、搜索) Kibana(可视化、分析)

Elasticsearch:分布索和分析引擎

核心角色:大脑和心脏 - 负责海量数据的存储、检索和分析。

详细作用:
  1. 分布式存储与高可用性
  • Elasticsearch 是一个分布式数据库。数据会被分散存储 across 多个服务器(节点)上。这意味着它可以处理PB****级别的海量数据,并且通过副本(replicas)机制,即使某个硬件发生故障,数据也不会丢失,服务也不会中断,实现了高可用性。
  1. 近乎实时的搜索
  • 这是它最核心的能力。数据从被写入到可以被搜索,只有毫秒级的延迟(约1秒内)。这对于需要实时监控和告警的场景至关重要。
  1. 强大的全文搜索引擎
  • 基于 Apache Lucene 构建,提供了无比强大和灵活的全文搜索功能。它不仅仅是简单的关键字匹配,还支持:

    • 模糊搜索:即使拼写错误也能找到结果。

    • 同义词处理:搜索“手机”也能找到包含“电话”的结果。

    • 相关性评分:根据多种因素对搜索结果进行排序,将最相关的结果排在前面。

  1. 先进的索引技术
  • 数据在存储时会被倒排索引(Inverted Index。这是一种类似书籍最后“索引”页的技术(例如,提到“数据库”这个词的页面是 10, 23, 45)。这使得它的查询速度极快,远远优于传统的逐行扫描数据库。
  1. 丰富的 RESTful API
  • 几乎所有操作,如数据的写入、查询、集群管理,都可以通过简单的 HTTP REST API 进行,这使得它非常容易与其他系统集成和开发。
  1. 强大的聚合分析能力
  • 除了搜索,它还能执行复杂的聚合(Aggregation)操作,相当于 SQL 中的 GROUP BY 再加上很多数学运算。例如:

    • “统计过去5分钟内,错误日志的数量并按应用分组?”

    • “计算网站访问量的95百分位延迟?”

    • “绘制用户地理位置的分布图?”

简单总结:Elasticsearch是一个专门为快速查找而设计的海量数据存储系统。它不擅长频繁更新事务(像MySQL那样),但极其擅长快速过滤、查询和分析巨量数据。

Logstash:服务器端数据处理管道

核心角色:搬运工和预处理车间 - 负责收集、解析、转换和输送数据。

详细作用:

Logstash 的工作流程被划分为三个阶段:Input Filter Output

  1. Input(输入):数据收集
  • 从各种来源实时地收集数据和日志。它拥有大量的插件,支持极其丰富的输入源,例如:

    • 文件(如 *.log )

    • 系统日志(Syslog)

    • 消息队列(如 Kafka, Redis, RabbitMQ)

    • 数据库(如 MySQL, PostgreSQL)

    • 监控数据(如 Beats、JMX)

    • 网络协议(如 TCP/UDP, HTTP)

  1. Filter(过滤):数据解析与 enrichment
  • 这是 Logstash 最强大的部分。原始日志(比如一行文本)通常是非结构化的,Filter 插件将其解析成结构化的、有意义的字段,以便于在 Elasticsearch 中高效查询。常见操作包括:

    • Grok:使用正则模式匹配来解析复杂的文本行。例如,从日志 “127.0.0.1 - -[10/Oct/2023:14:16:39 +0000] “GET / HTTP/1.1” 200 3574” 中解析出client_ip , timestamp , http_method , response_code 等字段。

    • Mutate:对字段进行修改,如重命名、删除、替换、转换数据类型。

    • Date:解析时间戳,并设置为事件的正式 @timestamp 字段。

    • GeoIP:根据 IP 地址查询出对应的国家、城市和经纬度信息,极大地丰富了数据维度。

    • KV:解析 key=value 这样的数据。

  1. Output(输出):数据发送
  • 将处理好的数据发送到指定的目的地。最常用的输出就是 Elasticsearch。但它也支持输出到:

    • 其他数据库(如 MongoDB)

    • 消息队列(如 Kafka)

    • 文件系统

    • 监控系统(如 Nagios)

    • 电子邮件等

简单总结:Logstash 是一个数据流引擎,负责将杂乱无章的原始数据“加工”成干净、结构化的数据,然后喂给 Elasticsearch。它是一个重量级工具,功能全面但资源消耗相对较高。

小提示:在需要轻量级数据收集的场景下,Elastic 提供了 Beats(如 Filebeat, Metricbeat)来替代 Logstash 的 Input 功能,它们更轻量、更专一,通常将数据直接发送给 Logstash 做进一步处理或直接发送给 Elasticsearch。

Kibana:数据可视化与管理平台

核心角色:窗口和仪表盘 - 用于数据的探索、可视化和交互。

详细作用:
  1. 数据探索与发现(Discover)
  • 提供一个交互式界面,让你能够直接查询和浏览存储在 Elasticsearch 中的原始数据。你可以使用搜索框(支持 Lucene 查询语法或 KQL),添加过滤器来动态地缩小数据范围,并查看匹配文档的详细内容。
  1. 可视化(Visualize)
  • 提供丰富的可视化组件,让你可以将数据转化为各种直观的图表,包括:

    • 柱状图、折线图、饼图

    • 指标看板(显示单个数字,如总错误数)

    • 数据表(用于聚合数据)

    • 坐标地图(与 GeoIP 结合,在地图上显示数据点)

    • 热力图

  1. 仪表盘(Dashboard)
  • 可以将多个可视化组件拖放组合成一个统一的、综合的仪表盘。这对于构建实时监控大屏非常有用,运维和开发团队可以在一个屏幕上全局掌握系统的健康状态、性能指标和业务趋势。
  1. 管理和维护
  • Kibana 还提供了 Stack Management 界面,用于管理和配置整个 Elastic Stack,例如:

    • 索引生命周期管理(ILM)

    • 用户和角色权限控制

    • 导入/导出保存的可视化和仪表盘

    • 配置 Kibana 本身

简单总结:Kibaa是ELK Stack 的“面子”,它将 Elasticsearch中深奥的数据以人类易于理解的图形方式呈现出来,使得任何人都能轻松地进行数据分析和决策,而无需编写复杂的查询代码。

这就是 ELK/Elastic Stack 的强大之处——它将数据的收集、存储和可视化三个环节无缝衔接,提供了一个端到端的解决方案,广泛应用于日志分析、应用性能监控(APM)、安全信息与事件管理(SIEM)、业务指标分析等多个领域。

案例环境:配置ELK日志分析系统

实验拓扑图:

在这里插入图片描述

配置和安装ELK日志分析系统,安装集群方式,2个elasticsearch节点,并监控apache服务器日志

在这里插入图片描述

在这里插入图片描述

配置elasticsearch环境

准备主机名、域名、java环境

登录192.168.108.41(node1)和192.168.108.42(node2) 配置域名解析 查看Java环境

# 最底下加2行
[root@node1 ~]# vi /etc/hosts
192.168.108.41   node1
192.168.108.42   node2
[root@node1 ~]# java -version
openjdk version "1.8.0_262"
OpenJDK Runtime Environment (build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)
部署elasticsearch软件

1.登录192.168.108.41(node1) 和 登录192.168.108.42(node2)

  • 安装elasticsearch rpm包,上传elasticsearch-5.5.0.rpm到/opt目录下
# cd /opt
# rpm -ivh elasticsearch-5.5.0.rpm
  • 加载系统服务
# systemctl daemon-reload    
# systemctl enable elasticsearch.service
  • 更改elasticsearch主配置文件
# cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak

# vim /etc/elasticsearch/elasticsearch.yml
17 cluster.name: my-elk-cluster                   #集群名字
23 node.name: node1   #node2节点改为node2          #节点名字
33 path.data: /data/elk_data                      #数据存放路径
37 path.logs: /var/log/elasticsearch/             #日志存放路径
43 bootstrap.memory_lock: false                   #不在启动的时候锁定内存:锁定物理内存地址,防止es内存被交换出去,也就是避免es使用swap交换分区,频繁的交换,会导致IOPS变高。
55 network.host: 0.0.0.0                          #提供服务绑定的IP地址,0.0.0.0代表所有地址
59 http.port: 9200                                #侦听端口为9200
68 discovery.zen.ping.unicast.hosts: ["node1", "node2"]           #集群发现通过单播实现
  • 创建数据存放路径并授权
# mkdir -p /data/elk_data
# chown elasticsearch:elasticsearch /data/elk_data/
  • 启动elasticsearch是否成功开启
# systemctl stop firewalld
# systemctl start elasticsearch.service

[root@node1 ~ 13:45:25]# netstat -antp |grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      51279/java 
[root@node2 ~ 13:52:21]## netstat -antp |grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      52435/java                
  • 查看节点信息 用真机192.168.108.1 的浏览器打开 http://192.168.108.41:9200 有文件打开 下面 是节点的信息
{
  "name" : "node1",
  "cluster_name" : "my-elk-cluster",
  "cluster_uuid" : "EZMf4b8MQdO5cQVkGwZtew",
  "version" : {
    "number" : "5.5.0",
    "build_hash" : "260387d",
    "build_date" : "2017-06-30T23:16:05.735Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.0"
  },
  "tagline" : "You Know, for Search"
  • 查看节点信息 用真机192.168.108.1 的浏览器打开 http://192.168.108.42:9200 有文件打开 下面 是节点的信息
{
  "name" : "node2",
  "cluster_name" : "my-elk-cluster",
  "cluster_uuid" : "EZMf4b8MQdO5cQVkGwZtew",
  "version" : {
    "number" : "5.5.0",
    "build_hash" : "260387d",
    "build_date" : "2017-06-30T23:16:05.735Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.0"
  },
  "tagline" : "You Know, for Search"
}

2.集群检查健康和状态

在笔记本浏览器192.168.108.41 打开 http://192.168.108.41:9200/_cluster/health?pretty 检查群集健 康情况

{
  "cluster_name" : "my-elk-cluster",
  "status" : "green",    #green就正常
  "timed_out" : false,
  "number_of_nodes" : 2,
  "number_of_data_nodes" : 2,
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "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
}

在笔记本浏览器192.168.108.1 打开 http://192.168.108.41:9200/_cluster/state?pretty 检查群集状态 信息

{
  "cluster_name" : "my-elk-cluster",
  "version" : 3,
  "state_uuid" : "ze0pyAOWRmWFfRgukDhvRA",
  "master_node" : "elt15cagRwKJUYCO683mtA",
  "blocks" : { },
  "nodes" : {
    "iIcRcmFfTS6p5XpNnVld9A" : {
      "name" : "node2",
      "ephemeral_id" : "U3I7QeJlQvifSJ4mJuj7Eg",
      "transport_address" : "192.168.108.42:9300",
      "attributes" : { }
    },
    "elt15cagRwKJUYCO683mtA" : {
      "name" : "node1",
      "ephemeral_id" : "k_ygB57MQx-sOBR4L1mIwA",
      "transport_address" : "192.168.108.41:9300",
      "attributes" : { }
    }
  },
  "metadata" : {
    "cluster_uuid" : "EZMf4b8MQdO5cQVkGwZtew",
    "templates" : { },
    "indices" : { },
    "index-graveyard" : {
      "tombstones" : [ ]
    }
  },
  "routing_table" : {
    "indices" : { }
  },
  "routing_nodes" : {
    "unassigned" : [ ],
    "nodes" : {
      "iIcRcmFfTS6p5XpNnVld9A" : [ ],
      "elt15cagRwKJUYCO683mtA" : [ ]
    }
  }
}

3.安装elasticsearch-head插件

查看上述集群的方式,及其不方便,我们可以通过安装elasticsearch-head插件后,来管理集群

登录192.168.108.41 node1和192.168.108.42 node2主机上传node-v8.2.1.tar.gz到/opt

yum install gcc gcc-c++ make -y

编译安装node组件依赖包,耗时比较长 30分钟

# cd /opt
# tar xzvf node-v8.2.1.tar.gz
# cd node-v8.2.1/
# ./configure 
# make -j3   (等待时间较长)
# make install

4.安装phantomjs端框架

PhantomJS 是 elasticsearch-head 的依赖组件(无界面浏览器,用于前端渲染 / 测试) 上传软件包到/usr/local/src/

# cd /usr/local/src/
# tar xjvf phantomjs-2.1.1-linux-x86_64.tar.bz2
# cd phantomjs-2.1.1-linux-x86_64/bin
# cp phantomjs /usr/local/bin

5.安装elasticsearch-head数据可视化工具

# cd /usr/local/src/
# tar xzvf elasticsearch-head.tar.gz         # 解压head插件源码包
# cd elasticsearch-head/                     # 进入插件目录
# npm install                 # npm 是 Node Package Manager 的缩写,Node.js 的包管理工具),用npm安装插件的所有依赖(package.json定义的依赖)

修改主配置文件

# cd ~
# vim /etc/elasticsearch/elasticsearch.yml   ####下面配置文件,插末尾
##
http.cors.enabled: true     ##开启跨域访问支持,默认为false
http.cors.allow-origin: "*"  ## 跨域访问允许的域名地址

# systemctl restart elasticsearch

启动elasticsearch-head 启动服务器

# cd /usr/local/src/elasticsearch-head/

[root@node1 elasticsearch-head 14:03:11]# npm run start &
[1] 98446
[root@node1 elasticsearch-head 14:03:24]# 
> elasticsearch-head@0.0.0 start /usr/local/src/elasticsearch-head
> grunt server

Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100

[root@node1 elasticsearch-head 14:03:36]# netstat -lnupt |grep 9100
tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      98456/grunt
[root@node1 elasticsearch-head 14:07:54]# netstat -lnupt |grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      98651/java

[root@node2 elasticsearch-head 14:13:12]# npm run start &
[1] 99053
[root@node2 elasticsearch-head 14:13:21]# 
> elasticsearch-head@0.0.0 start /usr/local/src/elasticsearch-head
> grunt server

Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100

[root@node2 elasticsearch-head 14:13:30]# netstat -lnupt | grep 9100
tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      99063/grunt         
[root@node2 elasticsearch-head 14:13:59]# netstat -lnupt | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      98969/java

6.验证结果

node1现象:

笔记本上打开浏览器输入http://192.168.108.41:9100/ 可以看见集 群健康值:未连接

在这里插入图片描述

在Elasticsearch 后面的栏目中输入http://192.168.108.41:9200

然后点连接 会发现: 集群健康值: green (0 of 0)

●node1信息动作

★node2信息动作

在这里插入图片描述

node2现象:

笔记本上打开浏览器输入http://192.168.108.42:9100/ 可以看见集 群健康值:未连接

在这里插入图片描述

在Elasticsearch 后面的栏目中输入http://192.168.108.42:9200

然后点连接 会发现:集群健康值: green (0 of 0)

★node1信息动作

●node2信息动作

在这里插入图片描述

登录192.168.108.41 node1主机 索引为index-demo,类型为test,可以看到成功创建

[root@node1 ~ 14:39:57]# curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
{
  "_index" : "index-demo",
  "_type" : "test",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "created" : true
}

在192.168.108.1 打开浏览器输入http://192.168100.41:9100/ 查看索引信息

在这里插入图片描述

在这里插入图片描述

上面图可以看见索引默认被分片5个,并且有一个副本

node1信息动作 01234

node2信息动作 01234

node1和node2是平等关系,不是主从关系

点击数据浏览可以看到存储的数据

点击数据浏览–会发现在node1上创建的索引为index-demo,类型为test, 相关的信息

在这里插入图片描述

安装logstash

用作日志搜集输出到elasticsearch中

登录主机192.168.108.43,关闭防火墙关闭selinux

安装Apahce服务(httpd)
[root@apache ~ 10:42:42]# yum -y install httpd
[root@apache ~ 15:23:11]# systemctl start httpd

#访问下日志
[root@apache ~ 15:23:31]# cd /var/log/httpd
[root@apache httpd 15:23:41]# ls
access_log  error_log

# access_log   访问日志
# error_log   错误日志
安装Java环境
[root@apache httpd 15:23:43]# java -version
openjdk version "1.8.0_262"
OpenJDK Runtime Environment (build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)
安装logstash
[root@apache httpd 15:23:56]# cd /opt
#上传logstash-5.5.1.rpm到/opt目录下

#安装logstash
[root@apache opt 15:24:23]# rpm -ivh logstash-5.5.1.rpm 
#启动logstash
[root@apache opt 15:24:41]# systemctl start logstash.service 
[root@apache opt 15:24:57]# systemctl enable logstash.service 
[root@apache opt 15:25:11]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
#建立logstash软连接
logstash(apache节点)与elasticsearch(node节点)做对接测试

Logstash这个命令测试

字段描述解释:

  • -f 通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash
  • -e 后面跟着字符串 该字符串可以被当做logstash的配置(如果是” ”,则默认使用stdin做为输入、 stdout作为输出)
  • -t 测试配置文件是否正确,然后退出
登录192.168.108.43 在Apache服务器上,输入采用标准输入 输出采用标准输出
[root@apache ~ 15:26:07]# logstash -e 'input { stdin{} } output { stdout{} }'
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using --path.settings. Continuing using the defaults
Could not find log4j2 configuration at path //usr/share/logstash/config/log4j2.properties. Using default config which logs to console
15:26:25.361 [main] INFO  logstash.setting.writabledirectory - Creating directory {:setting=>"path.queue", :path=>"/usr/share/logstash/data/queue"}
15:26:25.364 [main] INFO  logstash.setting.writabledirectory - Creating directory {:setting=>"path.dead_letter_queue", :path=>"/usr/share/logstash/data/dead_letter_queue"}
15:26:25.434 [LogStash::Runner] INFO  logstash.agent - No persistent UUID file found. Generating new UUID {:uuid=>"a2c67cfd-84f9-453b-8cc5-2831311407f4", :path=>"/usr/share/logstash/data/uuid"}
15:26:25.770 [[main]-pipeline-manager] INFO  logstash.pipeline - Starting pipeline {"id"=>"main", "pipeline.workers"=>2, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>5, "pipeline.max_inflight"=>250}
15:26:25.933 [[main]-pipeline-manager] INFO  logstash.pipeline - Pipeline main started
The stdin plugin is now waiting for input:
15:26:26.110 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com     #需要输入www.baidu.com
2025-12-12T07:26:41.015Z apache www.baidu.com
www.sina.com.cn   #需要输入www.sina.com.c
2025-12-12T07:26:51.791Z apache www.sina.com.cn
#ctrl_c退出
^C15:26:56.615 [SIGINT handler] WARN  logstash.runner - SIGINT received. Shutting down the agent.
15:26:56.626 [LogStash::Runner] WARN  logstash.agent - stopping pipeline {:id=>"main"}
使用rubydebug显示详细输出,codec为一种编解码器
[root@apache ~ 15:26:56]# logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using --path.settings. Continuing using the defaults
Could not find log4j2 configuration at path //usr/share/logstash/config/log4j2.properties. Using default config which logs to console
15:27:33.028 [[main]-pipeline-manager] INFO  logstash.pipeline - Starting pipeline {"id"=>"main", "pipeline.workers"=>2, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>5, "pipeline.max_inflight"=>250}
15:27:33.106 [[main]-pipeline-manager] INFO  logstash.pipeline - Pipeline main started
The stdin plugin is now waiting for input:
15:27:33.263 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com     #需要输入www.baidu.com
{
    "@timestamp" => 2025-12-12T07:27:44.135Z,
      "@version" => "1",
          "host" => "apache",
       "message" => "www.baidu.com"
}    
#ctrl_c退出
^C15:27:46.612 [SIGINT handler] WARN  logstash.runner - SIGINT received. Shutting down the agent.
15:27:46.638 [LogStash::Runner] WARN  logstash.agent - stopping pipeline {:id=>"main"}

使用logstash将信息写入elasticsearch中, 输入 输出 对接

[root@apache ~ 15:27:46]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.108.41:9200"] } }'
......
The stdin plugin is now waiting for input:
15:28:34.490 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com    #输入内容
www.360.cn       #输入内容
www.qq.com       #输入内容
笔记本192.168.108.1 登陆

打开浏览器 输入http://192.168.108.41:9100/

多出 logstash-2025.12.12(没命名,自动用时间后缀)

在这里插入图片描述

查看索引信息

在这里插入图片描述

点击数浏览查看响应的内容

在这里插入图片描述

登录192.168.108.43 (Apache主机) 做对接配置

Logstash配置文件

Logstash配置文件主要由三部分组成:input、output、filter(根据需要)

[root@apache ~ 16:31:20]# chmod o+r /var/log/messages 
[root@apache ~ 16:31:43]# ll /var/log/messages 
-rw----r--. 1 root root 779463 Dec 12 16:31 /var/log/messages
[root@apache ~ 16:31:54]# vim /etc/logstash/conf.d/system.conf
input {
	file{
	 path => "/var/log/messages"
	 type => "system"
	 start_position => "beginning"
}
}
output {
	elasticsearch {
	  hosts => ["192.168.108.41:9200"]
	  index => "system-%{+YYYY.MM.dd}"
}
}

[root@apache ~ 16:32:40]# systemctl restart logstash.service 

笔记本打开浏览器 输入http://192.168.108.41:9100/ 查看索引信息

多出 system-2025.12.12

在这里插入图片描述

点击数据浏览,看内容

在这里插入图片描述

内容不直观,装个kibana数据可视化

安装Kibana

在这里插入图片描述

登录192.168.108.41 node1主机

在node1主机安装kibana

上传kibana-5.5.1-x86_64.rpm 到/usr/local/src目录

[root@node1 ~ 14:40:08]# cd /usr/local/src/
# 上传kibana-5.5.1-x86_64.rpm 到/usr/local/src目录
[root@node1 src 16:45:25]# cd /etc/kibana/
[root@node1 kibana 16:45:31]# cp kibana.yml kibana.yml.bak
[root@node1 kibana 16:45:42]# vim kibana.yml
2 server.port: 5601                                            # kibana打开的端口
7 server.host: "0.0.0.0"                                       #kibana侦听的地址
21 elasticsearch.url: "http://192.168.108.41:9200"             #和elasticsearch建立联系
30 kibana.index: ".kibana"                                     #在elasticsearch中添加.kibana索引
[root@node1 kibana 16:46:53]# systemctl enable kibana.service --now

笔记本浏览器输入192.168.108.41:5601

在这里插入图片描述

首次登录创建一个索引 名字:system-* (这是对接系统日志文件)

然后点最下面的出面的create 按钮创建

在这里插入图片描述

然后点最左上角的Discover按钮 会发现system-*信息

在这里插入图片描述

然后点下面的host旁边的add

在这里插入图片描述

在这里插入图片描述
发现右面的图只有 Time 和host 选项了 这个比较友好

对接Apache主机的Apache 日志文件(访问的、错误的)

apache主机操作

[root@apache ~ 16:51:14]# cd /etc/logstash/conf.d/
[root@apache conf.d 16:51:25]# touch apache_log.conf

[root@apache conf.d 16:54:49]# vim apache_log.conf 
input {
    file {
        path => "/etc/httpd/logs/access_log"
        type => "access"
        start_position => "beginning"
    }
    file {
        path => "/etc/httpd/logs/error_log"
        type => "error"
        start_position => "beginning"
    }
}

output {
    if [type] == "access" {
        elasticsearch {
            hosts => ["192.168.108.41:9200"]
            index => "apache_access-%{+YYYY.MM.dd}"
        }
    }
    if [type] == "error" {
        elasticsearch {
            hosts => ["192.168.108.41:9200"]
            index => "apache_error-%{+YYYY.MM.dd}"
        }
    }
}

# 再conf.d目录里执行
[root@apache conf.d 16:56:10]# /usr/share/logstash/bin/logstash -f apache_log.conf

登录192.168.108.1 node1主机

打开输入http://192.168.108.43

在这里插入图片描述

打开浏览器 输入http://192.168.108.41:9100/ 查看索引信息

能发现 apache_error-2025.12.12 apache_access-2025.12.12

在这里插入图片描述

打开浏览器 输入http://192.168.108.41:5601。可以多刷新几次,观察kibana

点击左下角management选项—>index patterns—>create index pattern

在这里插入图片描述
分别创建apache_access-* 和 apache_error-* 的索引 即可

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐