编辑
2024-12-23
ELK
00

Filebeat 上传日志到 ELK

安装

在 Windows 上安装 Filebeat 的步骤如下:

1. 下载 Filebeat

  1. 访问 Elastic 官网的下载页面。https://www.elastic.co/downloads/beats/filebeat
  2. 找到适用于 Windows 的 Filebeat 版本,点击下载。

2. 解压文件

  1. 下载完成后,找到压缩文件(通常是 .zip 格式)。
  2. 右键点击压缩文件,选择“解压缩到当前文件夹”或使用其他解压工具解压。
  3. 解压后,您会看到一个名为 filebeat-<version>-windows 的文件夹。

3. 配置 Filebeat

  1. 进入解压后的文件夹。
  2. 找到 filebeat.yml 配置文件。可以使用文本编辑器(如 Notepad++ 或 Visual Studio Code)打开它。
  3. 根据您的需求修改配置文件,例如添加日志输入路径、输出设置等。您可以参考文档最后的配置示例。

4. 安装 Filebeat 服务

在 Windows 上,您可以将 Filebeat 作为服务运行。请按照以下步骤进行:

使用 PowerShell 安装 Filebeat 服务

  1. 打开 PowerShell(以管理员身份运行): 在 Windows 搜索框中输入 PowerShell,右键点击 "Windows PowerShell",选择 "以管理员身份运行"。
  2. 导航到 Filebeat 的安装目录: 使用 cd 命令导航到解压后的 Filebeat 文件夹。例如:
    powershell
    cd "C:\Program Files\Filebeat\filebeat-<version>-windows"
  3. 运行 PowerShell 脚本以安装 Filebeat 服务:
    powershell
    .\install-service-filebeat.ps1
  4. 启动 Filebeat 服务:
    powershell
    Start-Service filebeat
  5. 检查 Filebeat 服务的状态:
    powershell
    Get-Service filebeat

5. 启动 Filebeat 服务

  1. 在同一命令提示符窗口中,运行以下命令以启动 Filebeat 服务:
    powershell
    Start-Service filebeat
  2. 您可以使用以下命令检查服务是否正在运行:
    powershell
    Get-Service filebeat

6. 验证 Filebeat 是否运行

  1. 您可以查看 Filebeat 的日志文件以确认其是否正常运行。日志文件通常位于 C:\Program Files\Filebeat\logs 目录下。
  2. 也可以在 Elasticsearch 中检查数据是否成功写入,使用 Kibana 或直接通过 Elasticsearch 的 API。

7. 停止和卸载 Filebeat 服务

如果需要停止 Filebeat 服务,可以运行:

powershell
Stop-Service filebeat

如果需要卸载 Filebeat 服务,可以运行:

powershell
.\uninstall-service-filebeat.bat

8. 其他注意事项

  • 确保您的 Windows 防火墙或其他安全软件允许 Filebeat 访问网络,尤其是连接到 Elasticsearch 的端口(通常是 9200)。
  • 如果使用的是 Elasticsearch 的安全功能,确保在 Filebeat 的配置中正确设置了用户名和密码。

通过以上步骤,您应该能够在 Windows 上成功安装并运行 Filebeat。

9. Windows Filebeat filebeat.yml 示例

yaml
###################### Filebeat Configuration Example ######################### #=========================== Filebeat inputs ============================= filebeat.inputs: # Apache 日志输入 - type: log enabled: true paths: # 将以下路径改为对应的日志目录,可以使用 * 通配符匹配多个日志文件 - E:/RequirementsDocument/ELK-LOG/install/httpd-2.4.62-240904-win64-VS17/Apache24/logs/access*.log fields: log_type: apache # IIS 日志输入 - type: log enabled: true paths: - C:/inetpub/logs/LogFiles/W3SVC*/u_ex*.log fields: log_type: iis # Tomcat 日志输入 - type: log enabled: true paths: - D:/tomcat8.5.73/logs/catalina*.log fields: log_type: tomcat # nginx 日志输入 - type: log enabled: true paths: - E:/RequirementsDocument/ELK-LOG/logs/nginx/access*.log fields: log_type: nginx #============================= Filebeat modules =============================== filebeat.config.modules: path: ${path.config}/modules.d/*.yml reload.enabled: false #==================== Elasticsearch template setting ========================== setup.template.name: "its-log" setup.template.pattern: "its-log-*" setup.template.settings: index.number_of_shards: 1 index.number_of_replicas: 0 _source.enabled: true setup.template: # Apache 模板 - name: "its-log-apache" pattern: "its-log-apache*" settings: index.number_of_shards: 1 index.number_of_replicas: 0 _source.enabled: true # IIS 模板 - name: "its-log-iis" pattern: "its-log-iis*" settings: index.number_of_shards: 1 index.number_of_replicas: 0 _source.enabled: true # Tomcat 模板 - name: "its-log-tomcat" pattern: "its-log-tomcat*" settings: index.number_of_shards: 1 index.number_of_replicas: 0 _source.enabled: true # nginx模板 - name: "its-log-nginx" pattern: "its-log-nginx*" settings: index.number_of_shards: 1 index.number_of_replicas: 0 _source.enabled: true #============================== Kibana ===================================== setup.kibana: #================================ Outputs ===================================== #-------------------------- Elasticsearch output ------------------------------ output.elasticsearch: # Array of hosts to connect to. hosts: ["10.180.27.36:9200"] index: "its-log-%{[fields.log_type]}-cd-%{+YYYY.MM.dd}" username: "xxxx" password: "xxxxxxxxx" #================================ Procesors ===================================== processors: - add_host_metadata: ~ - add_cloud_metadata: ~ #============================== Xpack Monitoring =============================== number_of_files: 3 close_removed: true clean_removed: true #============================== Logging ===================================== logging: level: info to_files: true files: path: C:\Program Files\Filebeat\logs name: filebeat keepfiles: 7 permissions: 0644

###10 Windows filebeat.yml 示例解释

以下是对 Filebeat 配置文件的逐行解释:

1. Filebeat 输入

yaml
filebeat.inputs: # Apache 日志输入 - type: log enabled: true paths: - E:/RequirementsDocument/ELK-LOG/install/httpd-2.4.62-240904-win64-VS17/Apache24/logs/access*.log fields: log_type: apache
  • filebeat.inputs:定义 Filebeat 的输入源。
  • type: log:指定输入类型为日志文件。
  • enabled: true:启用此输入。
  • paths:定义要读取的日志文件路径,支持通配符(*)。
  • fields:自定义字段,这里定义了 log_typeapache,可以用于后续的索引或处理。

接下来的输入部分(IIS、Tomcat、nginx)与 Apache 输入类似,定义了不同类型的日志源,分别为:

  • IIS 日志:C:/inetpub/logs/LogFiles/W3SVC*/u_ex*.log
  • Tomcat 日志:D:/tomcat8.5.73/logs/catalina*.log
  • nginx 日志:E:/RequirementsDocument/ELK-LOG/logs/nginx/access*.log

2. Filebeat 模块

yaml
filebeat.config.modules: path: ${path.config}/modules.d/*.yml reload.enabled: false
  • filebeat.config.modules:配置 Filebeat 模块。
  • path:指定模块文件的位置。
  • reload.enabled:是否启用模块的动态重载,这里设置为 false

3. Elasticsearch 模板设置

yaml
setup.template.name: "its-log" setup.template.pattern: "its-log-*" setup.template.settings: index.number_of_shards: 1 index.number_of_replicas: 0 _source.enabled: true
  • setup.template.name:设置索引模板的名称。
  • setup.template.pattern:指定匹配的索引模式。
  • setup.template.settings:定义索引的设置:
    • index.number_of_shards:将索引分为 1 个分片。
    • index.number_of_replicas:不创建副本(0)。
    • _source.enabled:启用源字段。

接下来的部分定义了针对不同日志类型(Apache、IIS、Tomcat、nginx)的模板设置,基本上与上述设置相同,都是为不同类型的日志指定索引模板。

4. Kibana 设置

yaml
setup.kibana:
  • setup.kibana:用于配置 Kibana 的地址和设置。虽然没有具体配置,但这表示 Filebeat 将连接到 Kibana。

5. 输出设置

yaml
output.elasticsearch: hosts: ["10.180.27.36:9200"] index: "its-log-%{[fields.log_type]}-cd-%{+YYYY.MM.dd}" username: "xxxx" password: "xxxxxxxx"
  • output.elasticsearch:配置 Filebeat 将数据发送到 Elasticsearch。
  • hosts:指定 Elasticsearch 的主机和端口。
  • index:定义索引名称的模式,使用 fields.log_type 来区分不同日志类型,并按日期格式化。
  • usernamepassword:用于连接 Elasticsearch 的凭据。

6. 处理器

yaml
processors: - add_host_metadata: ~ - add_cloud_metadata: ~
  • processors:用于在发送数据之前处理数据。
  • add_host_metadata:添加主机元数据(如主机名、IP 地址等)。
  • add_cloud_metadata:添加云元数据(如果适用)。

7. Xpack 监控设置

yaml
number_of_files: 3 close_removed: true clean_removed: true
  • 这些设置用于监控 Filebeat 的状态,number_of_files 指定最大文件数,close_removedclean_removed 控制日志文件的关闭和清理行为。

8. 日志设置

yaml
logging: level: info to_files: true files: path: C:\Program Files\Filebeat\logs name: filebeat keepfiles: 7 permissions: 0644
  • logging:配置 Filebeat 的日志设置。
  • level:设置日志级别为 info
  • to_files:将日志输出到文件。
  • files:定义日志文件的相关设置:
    • path:日志文件的存储路径。
    • name:日志文件的名称。
    • keepfiles:保留的日志文件数量。
    • permissions:设置日志文件的权限。

总结

这个配置文件定义了 Filebeat 如何收集不同类型的日志(Apache、IIS、Tomcat、nginx),如何将这些日志发送到 Elasticsearch,并配置了相关的索引模板和日志记录设置。每个部分都可以根据实际需求进行调整,以确保 Filebeat 能够高效地收集和发送日志数据。

Ubuntu 使用 tar.gz 包安装 Filebeat 步骤

1. 下载并解压 Filebeat

首先,确保您已经下载并解压了 Filebeat 的 tar.gz 包。如果还没有,可以使用以下命令下载并解压:

bash
# 下载 Filebeat tar.gz 包(请根据需要替换版本号) wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.8.23-linux-x86_64.tar.gz # 解压缩 tar xzvf filebeat-6.8.23-linux-x86_64.tar.gz # 进入解压后的目录 cd filebeat-6.8.23-linux-x86_64

2. 配置 Filebeat

在解压后的目录中,您会找到 filebeat.yml 配置文件。您需要根据您的需求编辑此文件(filebeat.yml示例请参考上面windows版本):

bash
vim filebeat.yml

在安装 6.8.23 版本时,可能会出现权限问题,请在 filebeat.yml 文件中添加以下配置:

yaml
seccomp: default_action: allow syscalls: - action: allow names: - rseq

3. 运行 Filebeat

要在后台运行 Filebeat,您可以使用 nohup 命令或将其作为系统服务运行。以下是两种方法:

方法 1:使用 nohup

nohup 命令允许您在退出终端后继续运行程序。您可以使用以下命令在后台运行 Filebeat:

bash
nohup ./filebeat -e -c filebeat.yml > filebeat.log 2>&1 &
  • -e:表示将日志输出到标准错误。
  • -c filebeat.yml:指定配置文件。
  • > filebeat.log 2>&1:将输出和错误重定向到 filebeat.log 文件。
  • &:将命令放入后台运行。

您可以使用以下命令查看 Filebeat 的日志输出:

bash
tail -f filebeat.log

方法 2:使用系统服务(推荐)

如果您希望更好地管理 Filebeat,建议将其作为系统服务运行。您可以创建一个系统服务单元文件,使 Filebeat 在系统启动时自动运行。

  1. 创建一个服务文件:

    bash
    sudo nano /etc/systemd/system/filebeat.service
  2. 在文件中添加以下内容:

    ini
    [Unit] Description=Filebeat Documentation=https://www.elastic.co/guide/en/beats/filebeat/current/index.html After=network.target [Service] User=root Group=root ExecStart=/path/to/filebeat/filebeat -e -c /path/to/filebeat/filebeat.yml Restart=always [Install] WantedBy=multi-user.target

    请确保将 /path/to/filebeat/filebeat/path/to/filebeat/filebeat.yml 替换为您实际的 Filebeat 可执行文件和配置文件的路径。

  3. 重新加载 systemd,使其识别新的服务:

    bash
    sudo systemctl daemon-reload
  4. 启动 Filebeat 服务:

    bash
    sudo systemctl start filebeat
  5. 设置 Filebeat 服务在系统启动时自动启动:

    bash
    sudo systemctl enable filebeat
  6. 检查 Filebeat 服务状态:

    bash
    sudo systemctl status filebeat

总结

以上是在使用 tar.gz 包安装 Filebeat 后,在后台运行 Filebeat 的两种方法。使用系统服务的方式更为推荐,因为它提供了更好的管理和监控功能。

使用 systemctl 启动的 Filebeat 服务的日志可以通过 journalctl 命令来查看。以下是查看 Filebeat 日志的步骤:

1. 查看 Filebeat 日志

您可以使用以下命令查看 Filebeat 的日志:

bash
sudo journalctl -u filebeat.service -f
  • -u filebeat.service:指定要查看的服务。
  • -f:实时跟踪日志输出,类似于 tail -f

2. 查看特定时间范围的日志

如果您只想查看特定时间范围内的日志,可以使用 --since--until 选项。例如,要查看今天的日志,可以这样做:

bash
sudo journalctl -u filebeat.service --since "today"

3. 查看最近的日志条目

如果您只想查看最近的几条日志,可以使用 -n 选项,例如查看最近的 50 条日志:

bash
sudo journalctl -u filebeat.service -n 50

4. 过滤日志

您还可以根据关键字过滤日志。例如,如果您想查找包含 "error" 的日志条目,可以使用:

bash
sudo journalctl -u filebeat.service | grep "error"

5. 查看所有日志

如果您想查看所有日志而不限制于 Filebeat 服务,可以直接运行:

bash
sudo journalctl -f

这将显示所有服务的实时日志输出。

编辑
2024-06-20
linux
00

有时候为了服务器安装很多信息是不能显露出来了,这其中就包含了tomcat服务器的版本号。

修改前如下:

a31e192063334ffab42af9477e7b8411.image.webp

1.进入tomcat安装路径(这里以/usr/local/tomcat为例说明):

cd  /usr/local/tomcat/lib unzip catalina.jar cd org/apache/catalina/util vim ServerInfo.properties

2.找到最下面,类似台下信息(版本不同以下信息不同):

server.info=Apache Tomcat/7.0.52 (Ubuntu) server.number=7.0.52.0 server.built=Jun 30 2016 01:59:37

修改之为以下,并保存:

server.info=Apache Tomcat server.number=0.0.0.0 server.built=Jun 30 2016 01:59:37

将修改后的信息压缩回jar包:

cd  /usr/local/tomcat/lib jar uvf catalina.jar org/apache/catalina/util/ServerInfo.properties

3.重启tomcat::

service tomcat restart

4.测试:

修改后如下:

a9aa3a8643558d38343b261e46b98dd7.image.webp

编辑
2024-05-15
database
00

mysql双主同步

MySQL8的双主同步(也称为双主复制或双向复制)是指两个MySQL服务器相互之间进行数据复制,从而确保数据的实时同步和数据冗余备份。

服务器说明

DB-MASTER(服务器A):172.165.32.132

DB-SLAVE(服务器B):172.165.32.182

DB VIP(Keepalived) :172.165.32.192

登录账号信息:

root/Cpcnet123$%^

TychonicUser/Cpcnet123$%^

登录命令:

mysql -uroot -p'Cpcnet123$%^'

配置同步步骤

1、在服务器A,my.cnf中配置同步信息

Mysql8位置在/etc/mysql/my.cnf

[mysqld] log-bin=mysql-bin #开启主从binlog(二进制日志),主库必须开启 binlog_format=mixed #指定二进制日志格式为mixed,即在语句和行两种模式之间自动切换 server-id=1 #配置server-id(唯一)标识主机,必须与从库不一致 relay-log=relay-bin #指定中继日志文件的名称为relay-bin,用于在主从复制中传输数据 relay-log-index=slave-relay-bin.index #指定中继日志索引文件的名称,用于记录中继日志文件的位置。 auto_increment_increment=1 #指定自增长ID的增量为1,用于在主从复制中避免ID冲突。 auto_increment_offset=1 #指定自增长ID的起始值为1,用于在主从复制中避免ID冲突。 expire_logs_days=30

2、重启mysql

sudo systemctl restart mysql

3、使用root账号登录mysql服务器A

mysql -uroot -p'Cpcnet123$%^'

4、进入mysql,创建同步用户

CREATE USER 'replica'@'%' IDENTIFIED BY 'SE$rft6y'; GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%'; FLUSH PRIVILEGES;

5、在服务器B,my.cnf中配置同步信息

Mysql8位置在/etc/mysql/my.cnf

[mysqld] log-bin=mysql-bin #开启主从binlog(二进制日志),主库必须开启 binlog_format=mixed #指定二进制日志格式为mixed,即在语句和行两种模式之间自动切换 server-id=2 #配置server-id(唯一)标识主机,必须与从库不一致 relay-log=relay-bin #指定中继日志文件的名称为relay-bin,用于在主从复制中传输数据 relay-log-index=slave-relay-bin.index #指定中继日志索引文件的名称,用于记录中继日志文件的位置。 auto_increment_increment=2 #指定自增长ID的增量为2,用于在主从复制中避免ID冲突。 auto_increment_offset=2 #指定自增长ID的起始值为2,用于在主从复制中避免ID冲突。 expire_logs_days=30

6、重启mysql

sudo systemctl restart mysql

7、使用root账号登录mysql服务器B

mysql -uroot -p'Cpcnet123$%^'

8、进入mysql,创建同步用户

CREATE USER 'replica'@'%' IDENTIFIED BY 'SE$rft6y'; GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%'; FLUSH PRIVILEGES;

9、在服务器B执行命令

show master status;

51c2754c97094da0a76b66214bdcdeda.image.webp 使用查询出来的log file名称(mysql-bin.000055)和pos(90427)配置服务器A的同步

10、在服务器A用root账号登录mysql执行以下命令

stop slave; reset slave; CHANGE MASTER TO MASTER_HOST='172.165.32.182', MASTER_USER='replica', MASTER_PASSWORD='SE$rft6y', MASTER_LOG_FILE='mysql-bin.000055', MASTER_LOG_POS=90427, get_master_public_key=1; start slave; show slave status\G;

b98912d884dfdbba286da295c6ce1098.image.webp

如果配置正确,状态应该显示Slave_IO_Running和Slave_SQL_Running均为Yes。

11、在服务器A使用root账号登录mysql执行命令

show master status;

67e3a0e202f7e4407d584231778f5130.image.webp

使用查询出来的log file名称(mysql-bin.000050)和pos(94845)配置服务器B的同步

12、在服务器B使用root账号登录mysql执行以下命令

stop slave; reset slave; CHANGE MASTER TO MASTER_HOST='172.165.32.132', MASTER_USER='replica', MASTER_PASSWORD='SE$rft6y', MASTER_LOG_FILE='mysql-bin.000050', MASTER_LOG_POS=94845, get_master_public_key=1; start slave; show slave status\G;

0820276b962f34aae70b9f8dcb885a85.image.webp

如果配置正确,状态应该显示Slave_IO_Running和Slave_SQL_Running均为Yes。

测试:

在master-A主机上创建同步数据库

CREATE DATABASE IF NOT EXISTS abcd DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci; use abcd; create table t1(id int,name varchar(20));

在master-B上查看是否同步了master-A的变化

show databases; use abcd; show tables;

在master-B上插入一条数据查看master-A上是否同步更新

insert into t1 (id,name) values (5,'王五');

在mster-A上查询在master-B上插入的数据

Select * from t1;

测试通过删除测试库abcd;

DROP DATABASE IF EXISTS abcd;

在MASTER-A导出完整数据

mysqldump -u root-p miind_sdwan_1_5 > /home/cpcnet/backup.sql

在MASTER-A删除miind_sdwan_1_5;

DROP DATABASE IF EXISTS miind_sdwan_1_5;

MASTER-B新建miind_sdwan_1_5;

CREATE DATABASE IF NOT EXISTS miind_sdwan_1_5;

在MASTER-A导入数据

source /home/cpcnet/full_backup.sql;

排查异常

select * from performance_schema.replication_applier_status_by_worker\G;
编辑
2024-05-15
中间件
00

该文章已加密,点击 阅读全文 并输入密码后方可查看。

编辑
2024-05-15
中间件
00

nginx的负载均衡主要是以下配置起作用

#负载均衡 upstream load_banance { #负载均衡方法,可选

,ip_hash等,不填写则为轮询方式; # 服务器的访问地址,最好使用服务器的私有IP以获得更好的性能和安全性。 server 172.163.32.125:8090 weight=1; server 172.163.32.165:8090 weight=1; }

以上配置表示当请求nginx时,会按照轮询的方式去172.163.32.125:8090和172.163.32.165:8090请求服务

以下是一个完整的nginx配置示例:

#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; #负载均衡 upstream load_banance { #负载均衡方法,可选:least_conn,ip_hash等,不填写则为轮询方式; # 服务器的访问地址,最好使用服务器的私有IP以获得更好的性能和安全性。 server 172.163.32.125:8090 weight=1; server 172.163.32.165:8090 weight=1; } server { listen 80; charset utf-8; root /home/allen/mnt/cpc/dist; location = /index.html { add_header Cache-Control "no-cache, no-store"; } location / { try_files $uri $uri/ @router; index index.html index.htm; } location @router { rewrite ^.*$ /index.html last; } location /api { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_http_version 1.1; proxy_set_header Connection ""; proxy_pass http://load_banance; rewrite "^/api/(.*)$" /$1 break; } client_max_body_size 10M; } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} }