草庐IT

【有手就行】filebeat+es+kibana收集Nginx日志

软件东哥 2024-06-17 原文

做这篇文章我已经自己搭建了3次,前2次都会遇到不一样的问题,第三次基本遇到问题就很快解决了。

这篇文章,介绍从0开始搭建Nginx,filebeat。es和kibana本次使用的是现有环境,不做介绍。

环境准备

  • VMware虚拟机
  • filebeat安装包

步骤1:虚拟机准备

确认虚拟机可以访问和远程

我是克隆的虚拟机,虚拟机搭建不做介绍

克隆虚拟机可能存在ip未能分配:我是通过重启所有机器解决的。

重启后

 网络测试

步骤2:安装Nginx

目标:局域网机器可访问

1、安装wget、tar及nginx必备库

yum -y install wget
yum install -y tar 

yum -y install make zlib zlib-devel gcc gcc-c++ libtool openssl openssl-devel
yum install -y pcre pcre-devel

2、 下载nginx并安装

wget http://nginx.org/download/nginx-1.21.4.tar.gztar -xzvf nginx-1.21.4.tar.gz

# ./configure是检查文件的命令,检查是否正确
./configure

#执行安装操作
make && make install

3、校验启动

#校验文件
/usr/local/nginx/sbin/nginx -t

#启动
/usr/local/nginx/sbin/nginx

 4、查看防火墙

#查看开放了哪些端口
firewall-cmd --list-all
#查看开放的端口
firewall-cmd --list-ports
#如果没有显示80,则需要开放80端口
firewall-cmd --add-port=80/tcp --permanent #开放端口 
firewall-cmd --remove-port=80/tcp --permanent
firewall-cmd --reload #重新加载

5、测试外网

6、查看日志

Nginx日志在logs下面。

/usr/local/nginx/logs

步骤2:安装filebeat

目标:连接es能够读取日志

1、下载

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

2、上传、解压

比如上传到:/usr/src/filebeat

通过一下命令解压

tar -zxvf 压缩文件名

3、配置Nginx.yml 和 filebeat.yml

Nginx.yml在 cd modules.d/ 文件夹里面

当然里面是是Nginx.yml.disabled

这是我启用后的截图:

【配置】Nginx.yml

这里你可以通过修改,然后在启用命令。

启动命令:

启动命令:./filebeat modules enable nginx
禁用命令:./filebeat modules disable nginx

也可以直接删除文件,自己本地上传。

# Module: nginx
# Docs: https://www.elastic.co/guide/en/beats/filebeat/master/filebeat-module-nginx.html

- module: nginx
  # Access logs
  access:
    enabled: true

    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    var.paths: ["/usr/local/nginx/logs/access.log*"]

  # Error logs
  error:
    enabled: true

    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    #var.paths:

  # Ingress-nginx controller logs. This is disabled by default. It could be used in Kubernetes environments to parse ingress-nginx logs
  ingress_controller:
    enabled: false

    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    var.paths: ["/usr/local/nginx/logs/error.log*"]

 配置filebeat.yml


filebeat.inputs:

# Each - is an input. Most options can be set at the input level, so
# you can use different inputs for various configurations.
# Below are the input specific configurations.

# filestream is an input for collecting log messages from files.
- type: log

  # Change to true to enable this input configuration.
  enabled: true

  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    - /usr/local/nginx/logs/*.log
  fields: 
    source: demo

# ============================== Filebeat modules ==============================

filebeat.config.modules:
  # Glob pattern for configuration loading
  path: ${path.config}/modules.d/*.yml

  # Set to true to enable config reloading
  reload.enabled: false

  # Period on which files under path should be checked for changes
  #reload.period: 10s

# ======================= Elasticsearch template setting =======================

setup.template.settings:
  index.number_of_shards: 1
  #index.codec: best_compression
  #_source.enabled: false

output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["192.168.1.666:9200"]

  # Protocol - either `http` (default) or `https`.
  #protocol: "https"

  # Authentication credentials - either API key or username/password.
  #api_key: "id:api_key"
  username: "elastic"
  password: "密码"
  indices:
    - index: "demo-%{+yyyy.MM.dd}"
      when.equals:
        fields.source: "demo"
processors:
  - add_host_metadata:
      when.not.contains.tags: forwarded
  - add_cloud_metadata: ~
  - add_docker_metadata: ~
  - add_kubernetes_metadata: ~

 启动后,如下图;会展示进程id

步骤3:ES查询

目标:能够查询到数据

1、打开Kibana-DevTools

输入如下命令,index自动带出

GET demo-2022.12.04/_search
{
  "query": {
    "match_all": {}
  }
}

查询结果

来到界面查询发现你没有,根据关键字【index pattern】在 Management 找到配置

右上角新建 Creat index pattern

选择时间戳字段

完成创建!右上角有删除按钮,后面不需要可以删除。

这样在界面就可以搜索啦

最终效果1

最终效果2

Filebeat后台启动

增加文件到如下目录

/usr/lib/systemd/system/filebeat.service

常用命令:

systemctl restart filebeat

systemctl stop filebeat

systemctl status filebeat

systemctl start filebeat

ps -ef | grep file

filebeat.service

其实重要的命令只有一句:ExecStart ***

还有一个属性:Restart=always;根据字面意思理解,重启属性:总是;也就是你必须通过上述命令 systemctl stop filebeat 去关闭。不能kill。kill掉了还会重启~~~~

[Unit]
Description=Filebeat sends log files to Logstash or directly to Elasticsearch.
Documentation=https://www.elastic.co/products/beats/filebeat
Wants=network-online.target
After=network-online.target

[Service]

Environment="BEAT_LOG_OPTS="
Environment="BEAT_CONFIG_OPTS=-c /usr/src/filebeat/filebeat-8.0.0-linux-x86_64/filebeat.yml"
Environment="BEAT_PATH_OPTS=--path.home /usr/src/filebeat/filebeat-8.0.0-linux-x86_64/filebeat --path.config /usr/src/filebeat/filebeat-8.0.0-linux-x86_64 --path.data /usr/src/filebeat/filebeat-8.0.0-linux-x86_64/data --path.logs /usr/src/filebeat/filebeat-8.0.0-linux-x86_64/logs"
ExecStart=/usr/src/filebeat/filebeat-8.0.0-linux-x86_64/filebeat --environment systemd $BEAT_LOG_OPTS $BEAT_CONFIG_OPTS $BEAT_PATH_OPTS
Restart=always

[Install]
WantedBy=multi-user.target

常见问题:

虚拟机Linux打开是黑屏

答:Vmware安装Linux打开一直黑屏的四个解决方法-爱码网 (likecs.com)

LInux未能获取到内网ip。

答:重启所有的虚拟机。

ping 127.0.0.1 通,但是ping www.baidu.com 不通

问题原因:没有启用联网功能,启用联网功能

vi /etc/sysconfig/network-scripts/ifcfg-ens33

修改配置: ONBOOT=yes

重启网络服务: service network restart

ifconfig command not found

需要安装 net-tools 

yum update

yum -y install net-tools

文章参考:

linux安装nginx - 行者无疆 - 博客园 (cnblogs.com)

[有手就行]filebeat零基础安装教程_大师兄啦啦啦的博客-CSDN博客_filebeat安装

Filebeat入门及使用-5 读取nginx日志,写入ES,并用kibana展示_小哇666的博客-CSDN博客_filebeat nginx

有关【有手就行】filebeat+es+kibana收集Nginx日志的更多相关文章

  1. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  2. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  3. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

  4. ruby-on-rails - 如何用不同的用户运行nginx主进程 - 2

    A/ctohttp://wiki.nginx.org/CoreModule#usermaster进程曾经以root用户运行,是否可以以不同的用户运行nginxmaster进程? 最佳答案 只需以非root身份运行init脚本(即/etc/init.d/nginxstart),就可以用不同的用户运行nginxmaster进程。如果这真的是你想要做的,你将需要确保日志和pid目录(通常是/var/log/nginx&/var/run/nginx.pid)对该用户是可写的,并且您所有的listen调用都是针对大于1024的端口(因为绑定(

  5. ruby - Sinatra 中的全局救援和日志记录异常 - 2

    如何在出现异常时指定全局救援,如果您将Sinatra用于API或应用程序,您将如何处理日志记录? 最佳答案 404可以在not_found方法的帮助下处理,例如:not_founddo'Sitedoesnotexist.'end500s可以通过调用带有block的错误方法来处理,例如:errordo"Applicationerror.Plstrylater."end错误的详细信息可以通过request.env中的sinatra.error访问,如下所示:errordo'Anerroroccured:'+request.env['si

  6. ruby-on-rails - 使用 Ruby 标准 Logger 每天只创建一个日志 - 2

    我正在使用ruby​​标准记录器,我想要每天轮换一次,所以在我的代码中我有:Logger.new("#{$ROOT_PATH}/log/errors.log",'daily')它运行完美,但它创建了两个文件errors.log.20130217和errors.log.20130217.1。如何强制它每天只创建一个文件? 最佳答案 您的代码对于长时间运行的应用程序是正确的。发生的事情是您在给定的一天多次运行代码。第一次运行时,Ruby会创建一个日志文件“errors.log”。当日期改变时,Ruby将文件重命名为“errors.log

  7. ruby - Cucumber/Savon 省略或删除日志输出 - 2

    在运行Cucumber测试时,我得到(除了测试结果)大量调试/日志相关的输出形式:D,[2013-03-06T12:21:38.911829#49031]DEBUG--:SOAPrequest:D,[2013-03-06T12:21:38.911919#49031]DEBUG--:Pragma:no-cache,SOAPAction:"",Content-Type:text/xml;charset=UTF-8,Content-Length:1592W,[2013-03-06T12:21:38.912360#49031]WARN--:HTTPIexecutesHTTPPOSTusingt

  8. ruby-on-rails - faraday如何设置日志级别 - 2

    我最近将我的http客户端切换到faraday,一切都按预期工作。我有以下代码来创建连接:@connection=Faraday.new(:url=>base_url)do|faraday|faraday.useCustim::Middlewarefaraday.request:url_encoded#form-encodePOSTparamsfaraday.request:jsonfaraday.response:json,:content_type=>/\bjson$/faraday.response:loggerfaraday.adapterFaraday.default_ada

  9. 网站日志分析软件--让网站日志分析工作变得更简单 - 2

    网站的日志分析,是seo优化不可忽视的一门功课,但网站越大,每天产生的日志就越大,大站一天都可以产生几个G的网站日志,如果光靠肉眼去分析,那可能看到猴年马月都看不完,因此借助网站日志分析工具去分析网站日志,那将会使网站日志分析工作变得更简单。下面推荐两款网站日志分析软件。第一款:逆火网站日志分析器逆火网站日志分析器是一款功能全面的网站服务器日志分析软件。通过分析网站的日志文件,不仅能够精准的知道网站的访问量、网站的访问来源,网站的广告点击,访客的地区统计,搜索引擎关键字查询等,还能够一次性分析多个网站的日志文件,让你轻松管理网站。逆火网站日志分析器下载地址:https://pan.baidu.

  10. ruby - 在 Ruby 数组中收集重复项的最快/单行方法? - 2

    像这样转换数组的最快/单行方法是什么:[1,1,1,1,2,2,3,5,5,5,8,13,21,21,21]...进入像这样的对象数组:[{1=>4},{2=>2},{3=>1},{5=>3},{8=>1},{13=>1},{21=>3}] 最佳答案 要获得所需的格式,您可以附加一个调用以映射到您的解决方案:array.inject({}){|h,v|h[v]||=0;h[v]+=1;h}.map{|k,v|{k=>v}}虽然它仍然是单行的,但它开始变得凌乱了。 关于ruby-在Ruby

随机推荐