精华内容
下载资源
问答
  • 3)如何文件中的关键字内容进行查找并替换 4)如何对类似xml文件一样,对文件内的关键字的值进行替换.例如:文本内容:...StudentName="张三".... 把关键字“StudentName”的值替换成"李四"后变成 StudentName="李四...
  • 我们的日志收集系统使用Filebeat来收集日志文件,部署时并没有多想,只配置了一下监控的日志文件名。上线几个月,日志监控从...查找该方法相关资料得知,只有当源文件和目标目录处于同一个文件系统、同volumn(即window

    我们的日志收集系统使用Filebeat来收集日志文件,部署时并没有多想,只配置了一下监控的日志文件名。上线几个月,日志监控从没出过问题。后来想想其实这里面有很多点需要考虑的,没出问题真是感谢Filebeat默认配置下想的就很周全。

    业务系统使用logback作为日志框架。通过查看源码,发现logback日志切割用的是JDK里File#renameTo()方法。如果该方法失败,就再尝试使用复制数据的方式切割日志。查找该方法相关资料得知,只有当源文件和目标目录处于同一个文件系统、同volumn(即windows下的C, D盘)下该方法才会成功,切不会为重命名的后的文件分配新的inode值。也就是说,如果程序里一直保存着该文件的描述符,那么当程序再写日志时,就会向重命名后的文件中写。那么问题来了,filebeat是会一直打开并保存文件描述符的,那么它是怎么得知日志被切割这件事的呢?

    如果只用当前文件描述符一路监控到天黑的话,那么当logback把日志重命名后,filebeat仍然会监控重命名后的日志,新创建的日志文件就看不到了。实际上,filebeat是通过close_inactivescan_frequency两个参数(机制)来应对这种情况的:

    • close_inactive 
      该参数指定当被监控的文件多长时间没有变化后就关闭文件句柄(file handle)。官方建议将这个参数设置为一个比文件最大更新间隔大的值。比如文件最长5s更新一次,那就设置成1min。默认值为5min.

    • scan_frequency 
      该参数指定Filebeat搜索新文件的频率(时间间隔)。当发现新的文件被创建时, Filebeat会为它再启动一个 harvester 进行监控。默认为10s。

    综合以上两个机制,当logback完成日志切割后(即重命名),此时老的harvester仍然在监控重命名后的日志文件,但是由于该文件不会再更新,因此会在close_inactive时间后关闭这个文件的 harvester。当scan_frequency时间过后,Filebeat会发现目录中出现了新文件,于是为该文件启动 harvester 进行监控。这样就保证了切割日志时也能不丢不重的传输数据。(不重是通过为每个日志文件保存offset实现的)

     

    反思

    先上官网链接 How Filebeat Works
    首先感谢filebeat的默认配置很给力,我们的日志收集系统使用Filebeat来收集日志文件,部署时并没有多想,只配置了一下监控的日志文件名。上线测试,日志采集这块从没出过问题。自己就没有深入考虑过Filebeat工作原理,只知道filebeat是根据文件系统文件名关联到inode信息,根据inode信息进行日志文件的监听的。并没有深入的结合配置及filebeat原理深入思考过Filebeat。

    Filebeat由两个主要组件组成:input 组件和文件监听器(harvester,下文都用"harvester"代替)。这俩组件一起工作以跟踪文件并将事件数据发送到指定的输出模块。
    下面我们来介绍一下input 和 harvester两个模块的作用、生命周期、和原理进行描述:

    1.1 harvester 简介和生命周期

    harvester负责读取单个文件的内容。harvester逐行读取每个文件,并将内容发送到输出模块。每个文件启动一个harvester线程。harvester负责打开和关闭文件,这意味着file descriptor在harvester运行时保持打开状态。如果在获取文件时删除或重命名该文件,Filebeat将继续读取该文件。这样做的影响是,在harvester关闭之前,磁盘上的空间将被保留。默认情况下,Filebeat会保持文件打开状态,直到到达close_inactive。

     关闭harvester有以下影响:

    • 文件句柄被关闭,如果文件在harvester仍在读取文件时被删除,则会释放基础资源。
    • 只有通过scan重新开始获取文件,scan操作的频率根据scan_frequency配置的值。
    • 如果在harvester关闭时移动或移除文件,则不会继续监听文件。

    想要控制harvester的关闭请使用close_*相关配置

    1.2 input 简介及配置

    input负责管理harvester,并查找所有要读取的文件。
    如果输入类型是log,则input将查找驱动器上与定义的glob路径匹配的所有文件,并为每个文件启动一个harvester。每个input都在自己的Go routine中运行。下面是配置的例子

    filebeat.inputs:
    - type: log
      paths:
        - /var/log/*.log
        - /var/path2/*.log
    
    • Filebeat当前支持多种input类型( 输入类型配置文档请点击链接)。每个input类型可以定义多次。当input类型为log时,filebeat会根据配置的路径检查每个文件,来判断是否需要启动harvester、是否已经有harvester在监听文件或是否可以忽略该文件(ignore_older配置详见)。在harvester关闭后,只有文件大小发生变化时,才会重新创建harvester监听新的数据。

    1.3 Filebeat记录文件状态

    Filebeat保存每个文件的状态,并经常将文件状态刷新到磁盘中的registry文件中(7.*以后版本的registry文件路径:./data/registry/filebeat/data.json)。该状态用于记录harvester读取文件的最后一个偏移量,并确保发送所有日志行。如果无法访问输出模块(如Elasticsearch或Logstash等),Filebeat将跟踪最后发送的偏移量,并在输出模块再次可用时继续读取文件。当Filebeat运行时,状态信息也保存在每个输入的内存中。当Filebeat重新启动时,使用registry文件来重建状态,Filebeat根据registry文件中的记录来恢复harvester。
    对于每个输入,Filebeat都会保留它找到的每个文件的状态。由于文件可以重命名或移动,文件名和路径不足以标识文件。对于每个文件,Filebeat存储唯一的标识符,以检测文件是否以前被捕获。
    如果每天创建大量新日志文件,您可能会发现registry文件变得太大,可以参考通过clean_*配置减少registry文件大小相关内容。

    1.4 Filebeat如何保证消息最少发送一次(at-least-once 特性)

    Filebeat保证日志事件将至少传递一次到配置的输出,并且不会丢失数据(个人理解不能完全保证详见2.1)。因为它将每个事件的传递状态存储在registry文件中(上述流程图中有描述)。在已定义的输出被阻止且未确认所有事件的情况下,Filebeat将继续尝试发送事件,直到输出模块确认已接收到事件为止。
    如果Filebeat在发送事件的过程中关闭,它不会等待输出确认所有事件后再关闭。当Filebeat重新启动时,将再次发送关闭前未确认的所有事件到输出模块。这样可以确保每个事件至少发送一次,但未确认的事件就可能成为重复事件,故只能保证至少传递一次。通过设置shutdown_timeout选项,可以将Filebeat配置为在结束进程前等待特定时间,来尽可能地多的收到确认消息。

    2 Filebeat异常场景及应对办法

    2.1 文件滚动时异常中断

    问题描述:
    通过阅读官方文档,以及自己的使用,个人认为filebeat并不能保证消息的at-least-once 特性,因为filebeat的input会在根据scan_frequency来扫描文件,如果日志滚动过于频繁且小于scan_frequency的时间就会发生滚动,这样就有可能出现个别文件不能被Filebeat的input模块扫描到,导致数据丢失,当然这种情况出现的概率极低,因为一般很少有系统的日志会在几秒内频繁滚动。
    应对办法:
    这种情况的出现我们需要调整两个地方:

    1. 日志滚动策略,降低日志滚动频率
    2. 减小scan_frequency的值,最小不能小于1s

    2.2 日志文件滑动策略与大量日志文件产生导致registry文件过大

    问题描述:
    首先解释下日志文件滑动生成策略,单个日志文件达到某种阈值(时间或容量),就会将生成一个新的文件名继续记录,而滚动生成就是将这个日志文件重命名,新的日志仍然使用原有文件名。只不过指向了新的inode信息。
    所以滑动生成日志的策略会导致,Filebeat在registry中产生大量的记录,滚动生成可以通过exclude_file的方式排出已经监听过的文件。
    应对办法
    如果你监听的日志文件是滑动策略,或没有办法配置exclude_file导致大量,那么需要配置clean_inactive或clean_removed,不然filebeat的registry文件的容量会不断增多。参考通过clean_*配置减少registry文件大小相关内容。
    elastic官方也给出了跟丰富的troubleshooting文档,供参考。

     

    filebeat采集数据的几个痛点的解决方案

    1.行转列

    filebeat采集多行日志的时候会把日志分开来采集,这样传递到logstash的时候就无法正确解析了,所以用把多行日志统一采集。 
    这时候可以使用:multiline配置选项。

    • multiline:适用于日志中每一条日志占据多行的情况,比如各种语言的报错信息调用栈。这个配置的下面包含如下配置:

      pattern:多行日志开始的那一行匹配的pattern 
      negate:是否需要对pattern条件转置使用,不翻转设为true,反转设置为false 
      match:匹配pattern后,与前面(before)还是后面(after)的内容合并为一条日志 
      max_lines:合并的最多行数(包含匹配pattern的那一行) 
      timeout:到了timeout之后,即使没有匹配一个新的pattern(发生一个新的事件),也把已经匹配的日志事件发送出去

    譬如采集tomcat日志的时候可以这么配

        multiline:
        pattern: ‘^\[‘
        negate:  true
        match:   after

    这样就能采集每一次输入的多行日志了,不过对已经存在的日志会一窝蜂的采集。

    2.带上自定义参数

    基本上filebeat数据通过logstash解析后传到es的数据都会进行分类。采集的时候就必须带上采集数据所属的类别,以便于之后的分析。filebeat可以在采集的数据上增加fields自定义参数,便于解析。

    • fields:向输出的每一条日志添加额外的信息,比如“level:debug”,方便后续对日志进行分组统计。默认情况下,会在输出信息的fields子目录下以指定的新增fields建立子目录,例如fields.level。 
      fields: level: debug

    不过这样采集的数据还是无法进行分析,因为数据到达es后,es默认会将数据进行分词,录入的数据会被分词器分析称各个term,无法进行分类。必须使用动态模板映射logstash传输到es的数据。

    3.多目录采集

    很多时候会采集多目录下的日志数据,并且每个日志数据都会有自己的自定义参数,这时候可以定义多个input_type来解决这个问题,写法如下

    filebeat.prospectors:
    - input_type: log
      paths:
        - /data1/server/tomcat/tomcat12004/logs/*
      fields:
        logIndex: tomcat
        docType: tomcat-log
        system:  m.openapi
      multiline:
        pattern: ‘^\[‘
        negate:  true
        match:   after
    - input_type: log
      paths:
        - /data1/server/tomcat/tomcat12001/logs/catalina.out
      fields:
        logIndex: tomcat
        docType: tomcat-log
        system:  csb
      multiline:
        pattern: ‘^\[‘
        negate:  true
        match:   after

     

    展开全文
  • Mac 系统下查看隐藏文件夹的方法

    千次阅读 2019-01-29 23:29:07
    背景 在window下可以通过点击文件-&... 显示隐藏文件夹打开隐藏的文件显示,那么在mac系统如何查看。我也有这个问题。 通过查找相关资料,发现是用快捷键组合键来完成显示的 Shift + Command + > ...

    背景

    在window下可以通过点击文件->查看-> 显示隐藏文件夹打开隐藏的文件显示,那么在mac系统中如何查看。我也有这个问题。
    通过查找相关资料,发现是用快捷键组合键来完成显示的

    Shift + Command + >
    
    展开全文
  • 15.2.5 在ext2 文件系统查找文件 125 15.2.6 改变ext2 文件系统中文件 的大小 126 15.3 VFS 127 15.3.1 VFS 超级块 128 15.3.2 VFS 索引节点 129 15.3.3 登记文件系统 129 15.3.4 挂接文件系统 130 15.3.5 在VFS...
  • Linux系统分析part2

    2008-10-29 14:56:33
    15.2.5 在ext2 文件系统查找文件 125 15.2.6 改变ext2 文件系统中文件 的大小 126 15.3 VFS 127 15.3.1 VFS 超级块 128 15.3.2 VFS 索引节点 129 15.3.3 登记文件系统 129 15.3.4 挂接文件系统 130 15.3.5 在VFS...
  • Linux系统分析part1

    2008-10-29 14:20:24
    15.2.5 在ext2 文件系统查找文件 125 15.2.6 改变ext2 文件系统中文件 的大小 126 15.3 VFS 127 15.3.1 VFS 超级块 128 15.3.2 VFS 索引节点 129 15.3.3 登记文件系统 129 15.3.4 挂接文件系统 130 15.3.5 在VFS...
  • 如何查看系统中有哪些进程什么是进程标识符?什么叫父进程,什么叫子进程C程序的存储空间怎么分配进程创建使用fork()创建进程 程序与进程 什么是程序? 程序是静态的概念,例如, gcc xxx.c -o a 磁盘中生成的a文件...

    程序与进程

    什么是程序?

    程序是静态的概念,例如,
    gcc xxx.c -o a
    磁盘中生成的a文件就叫做程序1

    什么是进程?

    进程则是动态的概念,程序的运行起来,系统中就多了一个进程

    如何查看系统中有哪些进程

    1,使用ps指令查看,配合grep来查找

    ps -aux|grp xxx
    

    2,使用top指令查看,类似windows任务管理器

    什么是进程标识符?

    每个进程都有一个非负整数表示的唯一ID,pid

    如何查看pid号

    #include <stdio.h>
    #include <sys/types.h>
    #include <unistd.h>
    int main()
    {
       pid_t pid
       pid = getpid();
       printf("%d\n",pid);
       return 0;
    }
    

    什么叫父进程,什么叫子进程

    进程A创建了进程B,则称进程A为进程B的父进程,B叫做子进程

    C程序的存储空间怎么分配

    高地址:命令行参数和环境变量
    低地址:栈

    未初始化的数据
    初始化的数据
    正文//代码段

    进程创建

    使用fork()创建进程

    在man 2函数中查看原型

           #include <unistd.h>
           pid_t fork(void);
    

    fork函数调用成功,返回两次
    返回值为0, 代表当前进程是子进程
    返回值是正数,代表当前进程为父进程
    调用失败,返回-1

    使用fork函数的目的:
    (1):一个父进程希望通过复制自己,使父子进程同时执行不同的代码段。
    (2):一个进程要执行一个不同的程序。这对shell是常见的情况。在这种情况下,子进程从fork返回后立即调用exec

    总结:fork调用一次返回两次,子进程返回0,父进程返回子进程的进程id,因为一个进程的子进程可以有多个,并且没有一个函数会使一个进程获得所以子进程的进程id。fork使子进程得到返回值为0,因为一个异常只会有一个父进程,所以子进程总是可以调用getpid()以获得其父进程的进程id(进程id 0总是由内核交换进程使用,所以一个子进程的进程id不可能为0)。子进程是父进程的副本,子进程获得父进程的数据空间,堆栈的副本,不共享存储空间部分,父子进程共享正文部分。

    使用vfork()创建进程

    同fork()创建进程区别:
    一:vfork直接使用父进程存储空间,不拷贝。
    二:vfork保证子进程先运行,当子进程调用exit退出之后,父进程才执行

    进程退出

    正常退出

    1,main函数调用return
    2,进程调用exit,标准c库
    3,进程调用_exit或者_Exit(),属于系统调用
    4,进程最后一个线程返回
    5,最后一个线程调用pthread_exit

    异常退出

    1,调用abort
    2,当进程收到某些信号时,如ctrl+c
    3,最后一个线程对取消请求作出响应

    不管进程如何终止,都会执行一段代码,为相应进程关闭所有打开描述符,释放他们所使用的存储器

    父进程等待子进程退出,并收集子进程的退出状态
    子进程退出状态不被收集,变成僵尸进程

    wait()函数

    函数原型为

           #include <sys/types.h>
           #include <sys/wait.h>
           pid_t wait(int *status);
           pid_t waitpid(pid_t pid, int *status, int options);
           int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options);
    
    

    wait()解析:
    如果其所有子进程都还在运行,则阻塞
    如果一个子进程已终止,正在等待父进程获取其终止状态,则取得该子进程的终止状态立即返回
    如果它没有任何子进程,则立即出错返回

    #include <stdio.h>
    #include <sys/types.h>
    #include <unistd.h>
    int main()
    {
       int cnt = 0;
       int status = 10;
       pid = fork();
       if(pid > 0)
       {   
           wait(&status);
           printf("child quit, child status = %d\n",WEXITSTATUS(status));
           while(1){
                  printf("cnt = %d\n",cnt);
                  printf("this is father print, pid = %d\n",getpid());
                  sleep(1);
           }
       }
       else if(pid == 0){
       while(1){
               printf("this is child print,pid = %d\n",getpid());
               sleep(1);
               cnt++;
               if(cnt == 5){
               exit(3);
               }
          }
       }
       return 0;
    }
    

    WEXITSTATUS(status):取子进程传送给exit, _exit, 或_Exit参数的低8位

    父进程如果不等待子进程退出,在子进程之前就结束了自己的“生命”,此时子进程叫做孤儿进程1
    Linux避免系统存在过多孤儿进程,init进程收留孤儿进程,变成孤儿进程的父进程

    展开全文
  • linux操作系统命令大全

    热门讨论 2009-03-21 22:36:05
    ·2.5 Linux查找文件的相关命令 ·2.2 Linux特有的命令 ·2.4 Linux常用的压缩及解压缩命令 ·2.6 Linux常用的磁盘命令 第三章:Shell操作与简易编程  Shell是Linux系统下的命令解释器,也是使用Linux...
  • 15.2.5 在ext2 文件系统查找文件 125 15.2.6 改变ext2 文件系统中文件 的大小 126 15.3 VFS 127 15.3.1 VFS 超级块 128 15.3.2 VFS 索引节点 129 15.3.3 登记文件系统 129 15.3.4 挂接文件系统 130 15.3.5 在VFS...
  • 15.2.5 在ext2 文件系统查找文件 125 15.2.6 改变ext2 文件系统中文件 的大小 126 15.3 VFS 127 15.3.1 VFS 超级块 128 15.3.2 VFS 索引节点 129 15.3.3 登记文件系统 129 15.3.4 挂接文件系统 130 15.3.5 在VFS...
  • 15.2.5 在ext2 文件系统查找文件 125 15.2.6 改变ext2 文件系统中文件 的大小 126 15.3 VFS 127 15.3.1 VFS 超级块 128 15.3.2 VFS 索引节点 129 15.3.3 登记文件系统 129 15.3.4 挂接文件系统 130 15.3.5 在VFS...
  • Linux系统总复习.txt

    2015-06-04 19:39:59
    UNIX/Linux主要版本、开源/自由软件、X Window、Linux应用领域 2、Linux系统安装 掌握 1)VMware简单使用 2)Linux系统安装 图形安装和字符安装,图形安装-语言中文,字符安装-语言英文,硬盘分区(重要:分区...
  • 一.Linux的文件系统结构.....................................................................................................6 二. 文件类型................................................................
  • 然后,搜索上述病毒文件,重点查找“c:windows”目录和“c:windows system” 及“c:windowssystem32”目录下的非法程序,找到后一一删除。接着,进入注册表编辑器,以病毒名为关键字进行搜索,找到后一一删除。...
  • 但一直以来人们使用传统人工的方式管理文件工资档案,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。 随着科学技术的不断提高,...
  • 要分析的sql语句是执行速度比较慢的。查找执行速度比较慢的sql语句。找到后,具体分析。 一、慢查询日志 慢查询日志是一种mysql提供的日志,记录所有执行时间超过某个...打开mysql的配置文件window系统下是my.in...

    要分析的sql语句是执行速度比较慢的。查找执行速度比较慢的sql语句。找到后,具体分析。

    一、慢查询日志

    慢查询日志是一种mysql提供的日志,记录所有执行时间超过某个时间界限的sql的语句。这个时间界限,我们可以指定。在mysql中默认没有开启慢查询,即使开启了,只会记录执行的sql语句超过10秒的语句。

    1. 如何开启慢查询日志

    打开mysql的配置文件,window系统下是my.ini / linux系统下是my.cnf

    max_connections=100:最大的连接数,默认是100

    log-slow-queries='man-log':指定慢查询日志的名称,默认是保存在和mysql的数据库文件同一个文件夹里面的。我们也可以自己知道存储位置,比如log-slow-queries=”d:/log”

    long_query_time=0.5:指定的时间界限。默认是10

    注意: 修改完成后,要重启mysql。

    2. 测试慢查询日志是否记录超过0.5秒的sql 语句。

    benchmark(count,expr)函数可以测试执行count次expr操作需要的时间。

    查看慢查询日志里面记录的sql语句的情况。

    在mysql的客户端进行查看慢查询日志的时间界限

    也可以更改该时间界限,只对当前会话有效。

    二、profiles机制

    该机制能够精确的记录执行sql语句的时间,能精确到小数点后8位

    开启方式:直接在 mysql的客户端进行开启

    set profiling=1|0(开启和关闭)

    查看记录的时间:

    show profiles

    注意:不适应时,最好将其关闭

    php当mysql的客户端,php代码如何实现。

    //开启
    $sql="set profiling=1";
    mysql_query($sql);
    //查询
    $sql="show profiles";
    mysql_query($sql);

    一个sql语句执行比较慢,大多数的原因是没有用到索引。

    转载于:https://www.cnblogs.com/chenjiacheng/p/6522570.html

    展开全文
  • 进程

    2021-01-19 14:55:29
    问2:如何查看系统中有哪些进程? 1.使用ps指令,实际工作配合grep来查找程序中是否存在一个进程 使用ps -aux可以生成很多的进程,通常需要使用grep来进行过滤 ps -aux|grep init //查看进程中的init进程 2.top指令...
  • 复制相应 *.CTL 文件到软件安装目录,重新启动 EditPlus ,则系统自动识别。 上面重复使用了“[0-9]”,表示连续出现的三个数字 “\0”代表第一个“[0-9]”对应的原型,“\1”代表第二个“[0-9]”对应的原型,...
  • 第3部分介绍Ubuntu的日常管理,包括文件和目录结构管理、权限管理、压缩和查找、磁盘管理、用户管理、磁盘配额、设备管理、进程管理、网络管理等。第4部分介绍Ubuntu的系统服务管理,包括Apache服务、FTP服务、邮件...
  • LINUX 24学时教程

    2011-10-21 18:33:38
    4.2.4 使用whereis命令查找文件 50 4.2.5 使用locate命令定位文件 50 4.2.6 使用whatis和apropos命令获取命令 简介 51 4.3 阅读子目录和文件 52 4.3.1 使用ls命令列出子目录的内容清单 52 4.3.2 使用dir和vdir命令列...
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    此外,可以直接检查 /var/log/messages文件,在该文件中可以找到计算机开机后系统已辨认出来的设备代号。 (3)查找挂接点 在决定将设备挂接之前,先要查看一下计算机是不是有个/mnt的空目录,该目录就是专门用来...
  • 5.2.23 通过搜索locate数据库来查找文件 62 5.2.24 在path语句说明的路径中查找 文件 62 5.2.25 在path语句中添加新路径 63 5.2.26 在文件内容中查找文本 63 5.2.27 寻求帮助 63 5.2.28 在后台运行命令程序 63 5.2....
  • RED HAT LINUX 6大全

    热门讨论 2011-10-21 18:46:06
    第4章 配置X Window系统,版本11 23 4.1 X Window系统 23 4.2 建立XFree86系统 24 4.3 配置XFree86系统 25 4.3.1 XF86Config文件 27 4.3.2 使用XConfigurator 28 4.4 检查XF86Config文件 32 4.4.1 XF86Config Files...
  • Editplus 3[1].0

    2011-04-02 10:45:21
    $(WindowList) 显示当前窗口列表并选择特定文件 例子 1. Java 编译器 菜单文本:Java 编译器 命令:c:\java\bin\javac.exe 参数:"$(FilePath)" 初始目录:$(FileDir) 捕获输出:开启 要运行已编译的 Java 类...

空空如也

空空如也

1 2 3 4 5
收藏数 100
精华内容 40
关键字:

window系统如何查找文件