精华内容
下载资源
问答
  • 任意文本日志配置远程Syslog采集

    千次阅读 2016-06-06 10:33:00
    本文将指引你:如何对任意文本内的日志进行采集,并通过Syslog协议,自动实时的发送到远程的集中日志分析中心,便于集中式的日志存储和管理。 Linux环境 Windows环境 Linux环境下的配置 以下内容适用...

    基本上所有的操作系统、应用程序产生的日志,都是记录在本地文件内,因此如果能解决任意文本的日志转syslog发送,几乎解决了所有常规和非常规的日志发送问题。

    本文将指引你:如何对任意文本内的日志进行采集,并通过Syslog协议,自动实时的发送到远程的集中日志分析中心,便于集中式的日志存储和管理。

    Linux环境下的配置

    以下内容适用于在Linux环境下,对任意的文本日志内容进行读取,并实时发送到远程的Syslog服务器。

    第一步:初始化日志采集环境

    先确保系统中的/var/spool/rsyslog 目录已存在:

    mkdir -v /var/spool/rsyslog
    if [ "$(grep Ubuntu /etc/issue)" != "" ]; then
     chown -R syslog:adm /var/spool/rsyslog
    fi

    第二步:创建Apahce日志文件采集配置

    新建Rsyslog的子配置文件,他通常在/etc/rsyslog.d下,需要/etc/rsyslog.conf去包含这个目录下的子配置文件:

    vim /etc/rsyslog.d/file-biglog.conf

    复制以下内容到apache-biglog.conf,注意注释部分的修改:

    $ModLoad imfile
    $InputFilePollInterval 10
    $PrivDropToGroup adm
    $WorkDirectory /var/spool/rsyslog

    ## 文本日志文件路径,根据实际情况修改:
    $InputFileName /var/log/message.txt
    $InputFileTag APPNAME1
    $InputFileStateFile stat-APPNAME1 ##当有多个input时,该名称必需唯一
    $InputFileSeverity info
    $InputFilePersistStateInterval 25000
    $InputRunFileMonitor

    ## 定义日志格式模板:
    $template BiglogFormatFile,”%msg%\n”

    ## 注意syslog日志服务器接收地址,根据实际情况修改:
    if $programname == ‘APPNAME1′ then @10.x.x.x:514;BiglogFormatFile
    if $programname == ‘APPNAME1′ then ~

    注:通过Rsyslog配置日志接收端的时候,如上示例@10.x.x.x:514,用于指定接收日志的服务器的协议、IP地址和端口号。使用@代表走UDP协议,使用@@代表走TCP协议,冒号后面的514代表接收端口。

    第三步:重启Rsyslog服务,日志采集开始工作

    service rsyslog restart

    此时可以通过观察系统中的Rsyslog日志,确定是否正常工作。

    cat /var/log/messages |grep rsyslog
    展开全文
  • nxlog 日志采集

    2017-11-20 13:44:00
    Nxlog 主要用于各业务后端服务的日志采集windows环境和linux环境都支持。 RPM 包:rpm -ivh http://nxlog.co/system/files/products/files/1/nxlog-ce-2.9.1716-1_rhel6.x86_64.rpm 检测: rpm -qa |grep ...

    Nxlog 主要用于各业务后端服务的日志采集,windows环境和linux环境都支持。

    RPM 包:
    rpm -ivh http://nxlog.co/system/files/products/files/1/nxlog-ce-2.9.1716-1_rhel6.x86_64.rpm 检测: rpm -qa |grep nxlog

    nglog 主要分两部分:

    Input In 部分:File参数对应的值为日志文件完整目录地址
    Output out部分:URL为日志采集接口地址

    配置示例:

    # cat  nglog.conf  ( windows 和 Linux  可通用 需注意编码格式问题 )

    # cat  nglog.conf 

    ## Please
    set the ROOT to the folder your nxlog was installed into, ## otherwise it will not start. #define ROOT C:\Program Files\nxlog define ROOT C:\Program Files (x86)\nxlog Moduledir %ROOT%\modules CacheDir %ROOT%\data Pidfile %ROOT%\data\nxlog.pid SpoolDir %ROOT%\data LogFile %ROOT%\data\nxlog.log <Input in> Module im_file File './*.log'
      // 日志目录
        SavePos     True
    </Input>
     
     
    <Output out>
        Module      om_http
        ContentType application/x-www-form-urlencoded
        URL         http://  
      // 日志采集接口地址
    </Output> <Route httpout> Path in => out </Route>

    多级目录的配置:

    所有日志在多个文件夹
    ## Please set the ROOT to the folder your nxlog was installed into,
    ## otherwise it will not start.
     
     
    #define ROOT C:\Program Files\nxlog
    define ROOT C:\Program Files (x86)\nxlog
     
     
    Moduledir %ROOT%\modules
    CacheDir %ROOT%\data
    Pidfile %ROOT%\data\nxlog.pid
    SpoolDir %ROOT%\data
    LogFile %ROOT%\data\nxlog.log
     
     # 1
    <Input in1>
        Module       im_file
        File        './1/*.log'
        SavePos     True
    </Input>
    # 2 <Input in2> Module im_file File './2/*.log' SavePos True </Input> <Output out> Module om_http ContentType application/x-www-form-urlencoded URL http://127.0.0.1/xx </Output> <Route httpout> Path in1,int2 => out </Route>

     

    转载于:https://www.cnblogs.com/sharesdk/p/7865896.html

    展开全文
  • 系统日志采集方法

    千次阅读 2020-07-18 22:53:30
    系统日志采集方法特征 构建应用系统和分析系统的桥梁,并将它们之间的关联解耦。 支持近实时的在线分析系统和分布式并发的离线分析系统。 具有高可扩展性,也就是说,当数据量增加时,可以通过增加节点进行水平扩展...

    系统日志采集方法特征

    • 构建应用系统和分析系统的桥梁,并将它们之间的关联解耦。
    • 支持近实时的在线分析系统和分布式并发的离线分析系统。
    • 具有高可扩展性,也就是说,当数据量增加时,可以通过增加节点进行水平扩展。

    常用的系统日志采集系统

    • Hadoop的Chukwa
    • Apache Flume
    • Facebook的Scribe
    • LinkedIn的Kafka

    Flume

    • 基本概念
      Flume是一个高可用的、高可靠的、分布式的海量日志采集、聚合和传输系统。Flume支持在日志系统中定制各类数据发送方,用于收集数据,同时,Flume提供对数据进行简单处理,并写到各种数据接收方(如文本、HDFS、HBase等)的能力
    • 核心
      Flume的核心是把数据从数据源(Source)收集过来,再将收集到的数据送到指定的目的地(Sink)。为了保证输送的过程一定成功,在送到目的地之前,会先缓存数据到管道(Channel),待数据真正到达目的地之后,Flume再删除缓存的数据。
    • 事件
      Flume的数据流由事件(Event)贯穿始终,事件是将传输的数据进行封装而得到的,是Flume传输数据的基本单位。如果是文本文件,事件通常是一行记录。事件携带日志数据并携带头信息,这些事件由Agent外部的数据源生成,当Source捕获事件后会进行特定的格式化,然后Source会把事件推入(单个或多个)Channel中。Channel可以看作是一个缓冲区,它将保存事件直到Sink处理完该事件。Sink负责持久化日志或者把事件推向另一个Source。
    • 安装
      1)下载安装包apache-flume-1.7.0-bin.tar.gz,并解压缩。
      2)在/etc/profile文件中配置JAVA_HOME、FLUME_HOME,保存退出后,执行source /etc/profile命令使配置文件生效。
    export JAVA_HOME=/opt/jdk1.8.0_251
    export JRE_HOME=$JAVA_HOME/jre
    export PATH=$PATH:$JAVA_HOME/bin
    export CLASSPATH=./://$JAVA_HOME/lib:$JRE_HOME/lib
    
    export FLUME_HOME=/opt/apache-flume-1.7.0-bin
    export FLUME_CONF_DIR=$FLUME_HOME/conf
    export PATH=$PATH:$FLUME_HOME/bin
    

    3)验证是否安装成功
    进入$FLUME_HOME/bin目录,执行flume-ng version命令可验证是否安装成功。

    [root@localhost ~]# cd $FLUME_HOME/bin
    [root@localhost bin]# flume-ng version
    Flume 1.7.0
    Source code repository: https://git-wip-us.apache.org/repos/asf/flume.git
    Revision: 511d868555dd4d16e6ce4fedc72c2d1454546707
    Compiled by bessbd on Wed Oct 12 20:51:10 CEST 2016
    From source with checksum 0d21b3ffdc55a07e1d08875872c00523
    
    • 使用方法
      Flume的用法很简单,主要是编写一个用户配置文件夹。在配置文件当中描述Source、Channel与Sink的具体实现,而后运行一个Agent实例。在运行Agent实例的过程中会读取配置文件的内容,这样Flume就会采集到数据。Flume提供了大量内置的Source、Channel和Sink类型,而且不同类型的Source、Channel和Sink可以进行灵活组合。
    • 配置文件的编写原则
      1)从整体上描述Agent中Sources、Sinks、Channels所涉及的组件
    # Name the components on this agent
    a1.sources = r1
    a1.sinks = k1
    a1.channels = c1
    

    2)详细描述Agent中每一个Source、Sink与Channel的具体实现,即需要指定Source到底是什么类型的,是接收文件的、HTTP的,还是Thrift的;对于Sink,需要指定结果是输出到HDFS中,还是HBase中等;对于Channel,需要指定格式是内存、数据库,还是文件等。

    # Describe/configure the source
    a1.sources.r1.type = netcat
    a1.sources.r1.bind = localhost
    a1.sources.r1.port = 44444
    
    # Describe the sink
    a1.sinks.k1.type = logger
    
    # Use a channel which buffers events in memory
    a1.channels.c1.type = memory
    a1.channels.c1.capacity = 1000
    a1.channels.c1.transactionCapacity = 100
    

    3)通过Channel将Source与Sink连接起来。

    # Bind the source and sink to the channel
    a1.sources.r1.channels = c1
    a1.sinks.k1.channel = c1
    

    4)启动Agent的shell操作

    [root@localhost bin]# flume-ng agent -n a1 -c ../conf -f ../conf/example.file -Dflume.root.logger=DEBUG,console
    

    参数说明:

    • -n 指定Agent的名称(与配置文件中代理的名字相同)
    • -c 指定Flume中配置文件的目录
    • -f 指定配置文件
    • -Dflume.root.logger=DEBUG,console 设置日志等级
      4)使用Telnet发送数据
    [root@localhost bin]# telnet localhost 44444
    Trying ::1...
    telnet: connect to address ::1: Connection refused
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    I am liguogang!
    OK
    
    

    效果如下:

    [root@localhost bin]# flume-ng agent -n a1 -c ../conf -f ../conf/example.file -Dflume.root.logger=DEBUG,console
    Info: Sourcing environment configuration script /opt/apache-flume-1.7.0-bin/conf/flume-env.sh
    Info: Including Hive libraries found via () for Hive access
    + exec /opt/jdk1.8.0_251/bin/java -Xmx20m -Dflume.root.logger=DEBUG,console -cp '/opt/apache-flume-1.7.0-bin/conf:/opt/apache-flume-1.7.0-bin/lib/*:/lib/*' -Djava.library.path= org.apache.flume.node.Application -n a1 -f ../conf/example.file
    2020-07-18 22:50:51,914 (lifecycleSupervisor-1-0) [INFO - org.apache.flume.node.PollingPropertiesFileConfigurationProvider.start(PollingPropertiesFileConfigurationProvider.java:62)] Configuration provider starting
    2020-07-18 22:50:51,916 (lifecycleSupervisor-1-0) [DEBUG - org.apache.flume.node.PollingPropertiesFileConfigurationProvider.start(PollingPropertiesFileConfigurationProvider.java:79)] Configuration provider started
    2020-07-18 22:50:51,916 (conf-file-poller-0) [DEBUG - org.apache.flume.node.PollingPropertiesFileConfigurationProvider$FileWatcherRunnable.run(PollingPropertiesFileConfigurationProvider.java:127)] Checking file:../conf/example.file for changes
    2020-07-18 22:50:51,917 (conf-file-poller-0) [INFO - org.apache.flume.node.PollingPropertiesFileConfigurationProvider$FileWatcherRunnable.run(PollingPropertiesFileConfigurationProvider.java:134)] Reloading configuration file:../conf/example.file
    2020-07-18 22:50:51,922 (conf-file-poller-0) [INFO - org.apache.flume.conf.FlumeConfiguration$AgentConfiguration.addProperty(FlumeConfiguration.java:930)] Added sinks: k1 Agent: a1
    2020-07-18 22:50:51,922 (conf-file-poller-0) [INFO - org.apache.flume.conf.FlumeConfiguration$AgentConfiguration.addProperty(FlumeConfiguration.java:1016)] Processing:k1
    2020-07-18 22:50:51,922 (conf-file-poller-0) [DEBUG - org.apache.flume.conf.FlumeConfiguration$AgentConfiguration.addProperty(FlumeConfiguration.java:1020)] Created context for k1: channel
    2020-07-18 22:50:51,922 (conf-file-poller-0) [INFO - org.apache.flume.conf.FlumeConfiguration$AgentConfiguration.addProperty(FlumeConfiguration.java:1016)] Processing:k1
    2020-07-18 22:50:51,922 (conf-file-poller-0) [DEBUG - org.apache.flume.conf.FlumeConfiguration$AgentConfiguration.isValid(FlumeConfiguration.java:313)] Starting validation of configuration for agent: a1
    2020-07-18 22:50:51,923 (conf-file-poller-0) [INFO - org.apache.flume.conf.LogPrivacyUtil.<clinit>(LogPrivacyUtil.java:51)] Logging of configuration details is disabled. To see configuration details in the log run the agent with -Dorg.apache.flume.log.printconfig=true JVM argument. Please note that this is not recommended in production systems as it may leak private information to the logfile.
    2020-07-18 22:50:51,925 (conf-file-poller-0) [DEBUG - org.apache.flume.conf.FlumeConfiguration$AgentConfiguration.validateChannels(FlumeConfiguration.java:467)] Created channel c1
    2020-07-18 22:50:51,928 (conf-file-poller-0) [DEBUG - org.apache.flume.conf.FlumeConfiguration$AgentConfiguration.validateSinks(FlumeConfiguration.java:674)] Creating sink: k1 using LOGGER
    2020-07-18 22:50:51,928 (conf-file-poller-0) [DEBUG - org.apache.flume.conf.FlumeConfiguration.validateConfiguration(FlumeConfiguration.java:135)] Channels:c1
    
    2020-07-18 22:50:51,928 (conf-file-poller-0) [DEBUG - org.apache.flume.conf.FlumeConfiguration.validateConfiguration(FlumeConfiguration.java:136)] Sinks k1
    
    2020-07-18 22:50:51,928 (conf-file-poller-0) [DEBUG - org.apache.flume.conf.FlumeConfiguration.validateConfiguration(FlumeConfiguration.java:137)] Sources r1
    
    2020-07-18 22:50:51,928 (conf-file-poller-0) [INFO - org.apache.flume.conf.FlumeConfiguration.validateConfiguration(FlumeConfiguration.java:140)] Post-validation flume configuration contains configuration for agents: [a1]
    2020-07-18 22:50:51,929 (conf-file-poller-0) [INFO - org.apache.flume.node.AbstractConfigurationProvider.loadChannels(AbstractConfigurationProvider.java:147)] Creating channels
    2020-07-18 22:50:51,933 (conf-file-poller-0) [INFO - org.apache.flume.channel.DefaultChannelFactory.create(DefaultChannelFactory.java:42)] Creating instance of channel c1 type memory
    2020-07-18 22:50:51,935 (conf-file-poller-0) [INFO - org.apache.flume.node.AbstractConfigurationProvider.loadChannels(AbstractConfigurationProvider.java:201)] Created channel c1
    2020-07-18 22:50:51,936 (conf-file-poller-0) [INFO - org.apache.flume.source.DefaultSourceFactory.create(DefaultSourceFactory.java:41)] Creating instance of source r1, type netcat
    2020-07-18 22:50:51,941 (conf-file-poller-0) [INFO - org.apache.flume.sink.DefaultSinkFactory.create(DefaultSinkFactory.java:42)] Creating instance of sink: k1, type: logger
    2020-07-18 22:50:51,943 (conf-file-poller-0) [INFO - org.apache.flume.node.AbstractConfigurationProvider.getConfiguration(AbstractConfigurationProvider.java:116)] Channel c1 connected to [r1, k1]
    2020-07-18 22:50:51,946 (conf-file-poller-0) [INFO - org.apache.flume.node.Application.startAllComponents(Application.java:137)] Starting new configuration:{ sourceRunners:{r1=EventDrivenSourceRunner: { source:org.apache.flume.source.NetcatSource{name:r1,state:IDLE} }} sinkRunners:{k1=SinkRunner: { policy:org.apache.flume.sink.DefaultSinkProcessor@3a2e57 counterGroup:{ name:null counters:{} } }} channels:{c1=org.apache.flume.channel.MemoryChannel{name: c1}} }
    2020-07-18 22:50:51,951 (conf-file-poller-0) [INFO - org.apache.flume.node.Application.startAllComponents(Application.java:144)] Starting Channel c1
    2020-07-18 22:50:51,978 (lifecycleSupervisor-1-1) [INFO - org.apache.flume.instrumentation.MonitoredCounterGroup.register(MonitoredCounterGroup.java:119)] Monitored counter group for type: CHANNEL, name: c1: Successfully registered new MBean.
    2020-07-18 22:50:51,979 (lifecycleSupervisor-1-1) [INFO - org.apache.flume.instrumentation.MonitoredCounterGroup.start(MonitoredCounterGroup.java:95)] Component type: CHANNEL, name: c1 started
    2020-07-18 22:50:51,979 (conf-file-poller-0) [INFO - org.apache.flume.node.Application.startAllComponents(Application.java:171)] Starting Sink k1
    2020-07-18 22:50:51,979 (conf-file-poller-0) [INFO - org.apache.flume.node.Application.startAllComponents(Application.java:182)] Starting Source r1
    2020-07-18 22:50:51,979 (lifecycleSupervisor-1-0) [INFO - org.apache.flume.source.NetcatSource.start(NetcatSource.java:155)] Source starting
    2020-07-18 22:50:51,980 (SinkRunner-PollingRunner-DefaultSinkProcessor) [DEBUG - org.apache.flume.SinkRunner$PollingRunner.run(SinkRunner.java:141)] Polling sink runner starting
    2020-07-18 22:50:51,986 (lifecycleSupervisor-1-0) [INFO - org.apache.flume.source.NetcatSource.start(NetcatSource.java:169)] Created serverSocket:sun.nio.ch.ServerSocketChannelImpl[/127.0.0.1:44444]
    2020-07-18 22:50:51,986 (lifecycleSupervisor-1-0) [DEBUG - org.apache.flume.source.NetcatSource.start(NetcatSource.java:190)] Source started
    2020-07-18 22:50:51,986 (Thread-2) [DEBUG - org.apache.flume.source.NetcatSource$AcceptHandler.run(NetcatSource.java:270)] Starting accept handler
    2020-07-18 22:51:13,466 (netcat-handler-0) [DEBUG - org.apache.flume.source.NetcatSource$NetcatSocketHandler.run(NetcatSource.java:315)] Starting connection handler
    2020-07-18 22:51:21,980 (conf-file-poller-0) [DEBUG - org.apache.flume.node.PollingPropertiesFileConfigurationProvider$FileWatcherRunnable.run(PollingPropertiesFileConfigurationProvider.java:127)] Checking file:../conf/example.file for changes
    2020-07-18 22:51:35,414 (netcat-handler-0) [DEBUG - org.apache.flume.source.NetcatSource$NetcatSocketHandler.run(NetcatSource.java:327)] Chars read = 17
    2020-07-18 22:51:35,416 (netcat-handler-0) [DEBUG - org.apache.flume.source.NetcatSource$NetcatSocketHandler.run(NetcatSource.java:331)] Events processed = 1
    2020-07-18 22:51:37,999 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:95)] Event: { headers:{} body: 49 20 61 6D 20 6C 69 67 75 6F 67 61 6E 67 21 0D I am liguogang!. }
    
    展开全文
  • 网站用户行为日志采集和后台日志服务器搭建

    万次阅读 多人点赞 2018-07-04 00:50:16
    1.使用场景 2.设计架构 3.设计实现 3.1埋点JS 3.2数据采集JS 3.3后台脚本

    原文地址: 网站用户行为日志采集和后台日志服务器搭建

    1.简介

    网站流量数据统计分析,可以帮助网站管理员、运营人员、推广人员等实时获取网站流量信息,并从流量来源、网站内容、网站访客特性等多方面提供网站分析的数据依据。从而帮助提高网站流量,提升网站用户体验,让访客更多的沉淀下来变成会员或客户,通过更少的投入获取最大化的收入。
    访问日志指用户访问网站时的所有访问、浏览、点击行为数据。比如点击了 哪一个链接,打开了哪一个页面,采用了哪个搜索项、总体会话时间等。而所有 这些信息都可通过网站日志保存下来。通过分析这些数据,可以获知许多对网站 运营至关重要的信息。采集的数据越全面,分析就能越精准。

    日志的生成渠道分为以下两种:

    • web 服务器软件(httpd、nginx、tomcat)自带的日志记录功能,如 Nginx 的 access.log 日志;
    • 自定义采集用户行为数据,通过在页面嵌入自定义的 javascript 代码来 获取用户的访问行为(比如鼠标悬停的位置,点击的页面组件等),然后通过 ajax 请求到后台记录日志,这种方式所能采集的信息会更加全面。

    在实际操作中,有以下几个方面的数据可以自定义的采集:

    类型列举
    系统特征比如所采用的操作系统、浏览器、域名和访问速度等
    访问特征包括停留时间、点击的 URL、所点击的“页面标签”及标签的属性等
    来源特征包括来访 URL,来访 IP 等
    来源特征包括所访问的产品编号、产品类别、产品颜色、产品价格、产品 利润、产品数量和特价等级等

    下面是博主访问京东首页,其自定义采集的数据日志格式的截取部分:

    https://mercury.jd.com/log.gif?t=www.100000&m=UA-J2011-1&pin=zaomianbao&uid=1522992113160771150291522&sid=15229913133260771150291522|42&v=je=0$sc=24-bit$sr=1680x1050$ul=en-us$cs=UTF-8$dt=京东(JD.COM)-正品低价、品质保障、配送及时、轻松购物!$hn=www.jd.com$fl=-$os=mac$br=chrome
    

    2.设计架构

    这里写图片描述

    埋点是指:在网页中预先加入小段 javascript 代码,这个代码片段一般会 动态创建一个 script 标签,并将 src 属性指向一个单独的 js 文件,此时这个单 独的 js 文件会被浏览器请求到并执行,这个 js 往往就是真正 的数据收集脚本。
    数据收集完成后,js 会请求一个后端的数据收集脚本, 这个脚本一般是一个伪装成图片的动态脚本程序,js 会将收集到的数据通过 http 参数的方式传递给后端脚本,后端脚本解析参数并按固定格式记录到访问 日志,同时可能会在 http 响应中给客户端种植一些用于追踪的 cookie。

    番外:为什么使用请求图片的形式收集?

    • 这里收集的形式其实有很多种,比如ajax请求,但是在实际生产环境中服务一般都是分布式部署,ajax请求就会涉及到跨域的问题(具体详见:同源策略与通过跨域资源共享实现ajax跨域访问),而请求图片地址的形式则不在同源策略的限制范围内,即请求图片没有跨域限制。另一方面,请求一个静态资源的速率旺旺比请求一个动态接口要快得多。

    3.设计实现

    步骤:

    1. 确定想要收集的信息
    2. 确定埋点代码
    3. 编写JS前端日志收集脚本
    4. 确定日志格式
    5. 编写后台脚本
    6. 日志切分
    7. 在网站页面进行埋点
    8. 检测日志数据

    选型:这里我们选用Apache作为Web服务器,日志后台服务器使用Nginx处理日志请求,同时将JS前端日志收集脚本直接放置在Nginx服务器内(架构中将其单独部署一个服务器)。

    3.1确定收集的信息

    名称途径备注
    访问时间web serverNginx $msec
    IPweb serverNginx $remote_addr
    域名JavaScriptdocument.domain
    URLJavaScriptdocument.URL
    页面标题JavaScriptdocument.title
    分辨率JavaScriptwindow.screen.height & width
    颜色深度JavaScriptwindow.screen.colorDepth
    ReferrerJavaScriptdocument.referrer
    浏览客户端web serverNginx $http_user_agent
    客户端语言javascriptnavigator.language
    访客标识cookieNginx $http_cookie
    网站标识javascript自定义对象
    状态码web serverNginx $status
    发送内容量web serverNginx $body_bytes_sent

    3.2埋点代码

    埋点,是网站分析的一种常用的数据采集方法。核心就是在需要进行数据采 集的关键点植入统计代码,进行数据的采集。比如以谷歌分析原型来说,需要在 页面中插入一段它提供的 javascript 片段,这个片段往往被称为 。

    <script type="text/javascript">
    	var _maq = _maq || [];
    	_maq.push(['_setAccount', 'zaomianbao']);
    	(function() {
    		var ma = document.createElement('script'); 
    		ma.type = 'text/javascript';
    		ma.async = true;
    		ma.src = 'http://192.168.214.152/ma.js';
    		var s = document.getElementsByTagName('script')[0]; 
    		s.parentNode.insertBefore(ma, s);
    	})();
    </script>
    

    其中_maq 是全局数组,用于放置各种配置,其中每一条配置的格式为:

    • _maq.push([‘Action’, ‘param1’, ‘param2’, …]);

    _maq 的机制不是重点,重点是后面匿名函数的代码,这段代码的主要目的
    就是引入一个外部的 js 文件(ma.js),方式是通过 document.createElement 方法 创建一个 script 并根据协议(http 或 https)将 src 指向对应的 ma.js,最后将这个 元素插入页面的 dom 树上。
    注意 ma.async = true 的意思是异步调用外部 js 文件,即不阻塞浏览器的解 析,待外部 js 下载完成后异步执行。这个属性是 HTML5 新引入的。

    番外:js 自调用匿名函数

    • 格式: (function(){})();
    • 第一对括号向脚本返回未命名的函数;后一对空括号立即执行返回的未命名函数,括号内为匿名函数的参数。
    • 自调用匿名函数的好处是,避免重名,自调用匿名函数只会在运行时执行一 次,一般用于初始化。

    3.3前端数据收集脚本

    数据收集脚本(ma.js)被请求后会被执行,一般要做如下几件事:

    • 1、通过浏览器内置 javascript 对象收集信息,如页面 title(通过 document.title)、 referrer(上一跳 url,通过 document.referrer)、用户显示器分辨率(通过 windows.screen)、cookie 信息(通过 document.cookie)等等一些信息。
    • 2、解析_maq 数组,收集配置信息。这里面可能会包括用户自定义的事件跟 踪、业务数据(如电子商务网站的商品编号等)等。
    • 3、将上面两步收集的数据按预定义格式解析并拼接(get 请求参数)。
    • 4、请求一个后端脚本,将信息放在 http request 参数中携带给后端脚本。

    这里唯一的问题是步骤 4,javascript 请求后端脚本常用的方法是 ajax,但是ajax 是不能跨域请求的。一种通用的方法是 js 脚本创建一个 Image 对象,将 Image 对象的 src 属性指向后端脚本并携带参数,此时即实现了跨域请求后端。这也是 后端脚本为什么通常伪装成 gif 文件的原因。

    示例JS代码:

    (function () {
        var params = {};
        //Document对象数据
        if(document) {
            params.domain = document.domain || ''; 
            params.url = document.URL || ''; 
            params.title = document.title || ''; 
            params.referrer = document.referrer || ''; 
        }   
        //Window对象数据
        if(window && window.screen) {
            params.sh = window.screen.height || 0;
            params.sw = window.screen.width || 0;
            params.cd = window.screen.colorDepth || 0;
        }   
        //navigator对象数据
        if(navigator) {
            params.lang = navigator.language || ''; 
        }   
        //解析_maq配置
        if(_maq) {
            for(var i in _maq) {
                switch(_maq[i][0]) {
                    case '_setAccount':
                        params.account = _maq[i][1];
                        break;
                    default:
                        break;
                }   
            }   
        }   
        //拼接参数串
        var args = ''; 
        for(var i in params) {
            if(args != '') {
                args += '&';
            }   
            args += i + '=' + encodeURIComponent(params[i]);
        }   
     
        //通过Image对象请求后端脚本
        var img = new Image(1, 1); 
        img.src = 'http://192.168.214.152/log.gif?' + args;
    })();
    

    整个脚本放在匿名函数里,确保不会污染全局环境。其中 log.gif 表面上请求静态资源,到了Nginx后台实则为一个后台脚本

    3.4日志格式

    日志格式主要考虑日志分隔符,一般会有以下几种选择:固定数量的字符、制表符分隔符、空格分隔符、其他一个或多个字符、特定的开始和结束文本。
    我们在 nginx 的配置文件中定义日志格式:

    log_format
    "$msec||$remote_addr||$status||$body_bytes_sent||$u_domain||$u_url|
    |$u_title||$u_referrer||$u_sh||$u_sw||$u_cd||$u_lang||$http_user_ag
    ent||$u_account";
    

    注意这里以 u_开头的是我们待会会自己定义的变量,其它的是nginx内置变量

    3.5后台脚本

    log.gif 是后端脚本,是一个伪装成 gif 图片的脚本。后端脚本一般需要完 成以下几件事情:

    • 1、解析 http 请求参数得到信息。
    • 2、从 Web 服务器中获取一些客户端无法获取的信息,如访客 ip 等。
    • 3、将信息按格式写入 log。
    • 4、生成一副 1×1 的空 gif 图片作为响应内容并将响应头的 Content-type设为 image/gif。
    • 5、在响应头中通过 Set-cookie 设置一些需要的 cookie 信息。

    之所以要设置 cookie 是因为如果要跟踪唯一访客,通常做法是如果在请求 时发现客户端没有指定的跟踪 cookie,则根据规则生成一个全局唯一的 cookie 并 种植给用户,否则 Set-cookie 中放置获取到的跟踪 cookie 以保持同一用户 cookie 不变。这种做法虽然不是完美的(例如用户清掉 cookie 或更换浏览器会被认为是两个用户),但是目前被广泛使用的手段。
    我们使用 nginx 的 access_log 做日志收集,不过有个问题就是 nginx 配置本身的逻辑表达能力有限,所以选用 OpenResty 做这个事情。

    番外:什么是OpenResty?
    OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。其中的核心是通过 ngx_lua 模块集成了 Lua,从而在 nginx 配置文 件中可以通过 Lua 来表述业务。而Lua 是一种轻量小巧的脚本语言,用标准 C 语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

    这里给出Nginx配置文件

    worker_processes  2;
    
    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"';
    					  
        log_format user_log_format "$msec||$remote_addr||$status||$body_bytes_sent||$u_domain||$u_url||$u_title||$u_referrer||$u_sh||$u_sw||$u_cd||$u_lang||$http_user_agent||$u_account";
        
        sendfile        on;  #允许sendfile方式传输文件,默认为off
    
        keepalive_timeout  65; #连接超时时间,默认为75s
    
        server {
            listen       80;
            server_name  localhost;
    		location /log.gif {
    			#伪装成gif文件
    			default_type image/gif;    
    			#nginx本身记录的access_log,日志格式为main
    			access_log  logs/access.log  main;
    		
    			access_by_lua "
    				-- 用户跟踪cookie名为__utrace
    				local uid = ngx.var.cookie___utrace        
    				if not uid then
    					-- 如果没有则生成一个跟踪cookie,算法为md5(时间戳+IP+客户端信息)
    					uid = ngx.md5(ngx.now() .. ngx.var.remote_addr .. ngx.var.http_user_agent)
    				end 
    				ngx.header['Set-Cookie'] = {'__utrace=' .. uid .. '; path=/'}
    				if ngx.var.arg_domain then
    				-- 通过subrequest到/i-log记录日志,将参数和用户跟踪cookie带过去
    					ngx.location.capture('/i-log?' .. ngx.var.args .. '&utrace=' .. uid)
    				end 
    			";  
    		
    			#此请求资源本地不缓存
    			add_header Expires "Fri, 01 Jan 1980 00:00:00 GMT";
    			add_header Pragma "no-cache";
    			add_header Cache-Control "no-cache, max-age=0, must-revalidate";
    		
    			#返回一个1×1的空gif图片
    			empty_gif;
    		}   
    	
    		location /i-log {
    			#内部location,不允许外部直接访问
    			internal;
    		
    			#设置变量,注意需要unescape
    			set_unescape_uri $u_domain $arg_domain;
    			set_unescape_uri $u_url $arg_url;
    			set_unescape_uri $u_title $arg_title;
    			set_unescape_uri $u_referrer $arg_referrer;
    			set_unescape_uri $u_sh $arg_sh;
    			set_unescape_uri $u_sw $arg_sw;
    			set_unescape_uri $u_cd $arg_cd;
    			set_unescape_uri $u_lang $arg_lang;
    			set_unescape_uri $u_account $arg_account;
    
    		
    			#打开subrequest(子请求)日志
    			log_subrequest on;
    			#自定义采集的日志,记录数据到user_defined.log
    			access_log logs/user_defined.log user_log_format;
    		
    			#输出空字符串
    			echo '';
    		}	
    	
        }
    }
    

    4.系统环境搭建部署

    注:这里是对192.168.214.152日志处理Nignx服务器的搭建,对于web服务器,直接在192.168.214.150服务器上执行yum install httpd即可安装成功。

    4.1准备安装包并上传服务器

    这里自己准备需要的安装包——注:Linux上传方式:三种方式实现Linux的文件上传下载

    [root@centos6-3 software]# cd /export/software/
    [root@centos6-3 software]# ll
    total 5900
    //一个Lua包,一个nginx包,一个openresty包,4个nginx模块包
    -rw-r--r--. 1 root root   64779 Jun 26 08:38 echo-nginx-module-0.58.tar.gz
    -rw-r--r--. 1 root root  847615 Jun 26 08:38 LuaJIT-2.0.4.tar.gz
    -rw-r--r--. 1 root root  569372 Jun 26 08:41 lua-nginx-module-0.10.0.tar.gz
    -rw-r--r--. 1 root root  833473 Jun 26 08:38 nginx-1.8.1.tar.gz
    -rw-r--r--. 1 root root   65029 Jun 26 08:38 ngx_devel_kit-0.2.19.tar.gz
    -rw-r--r--. 1 root root 3616491 Jun 26 08:40 openresty-1.9.7.3.tar.gz
    -rw-r--r--. 1 root root   35495 Jun 26 08:38 set-misc-nginx-module-0.29.tar.gz
    [root@centos6-3 software]# 
    

    4.2依赖安装

    [root@centos6-3 software]# yum -y install gcc perl pcre-devel openssl openssl-devel
    

    4.3解压编译安装LuaJIT

    [root@centos6-3 software]#  tar -zxvf LuaJIT-2.0.4.tar.gz -C /usr/local/src/
    LuaJIT-2.0.4/
    LuaJIT-2.0.4/COPYRIGHT
    LuaJIT-2.0.4/Makefile
    LuaJIT-2.0.4/README
    LuaJIT-2.0.4/doc/
    LuaJIT-2.0.4/doc/bluequad-print.css
    ....
    [root@centos6-3 software]# cd /usr/local/src/LuaJIT-2.0.4/
    [root@centos6-3 LuaJIT-2.0.4]# make && make install PREFIX=/usr/local/luajit
    ==== Building LuaJIT 2.0.4 ====
    make -C src
    ...
    [root@centos6-3 LuaJIT-2.0.4]# 
    

    4.4设置LuaJIT环境变量

    [root@centos6-3 LuaJIT-2.0.4]# vi /etc/profile
    //文件末尾追加以下内容
    export LUAJIT_LIB=/usr/local/luajit/lib
    export LUAJIT_INC=/usr/local/luajit/include/luajit-2.0
    //更新环境变量
    [root@centos6-3 LuaJIT-2.0.4]#  source /etc/profile
    [root@centos6-3 LuaJIT-2.0.4]# 
    

    4.5解压modules

    [root@centos6-3 LuaJIT-2.0.4]# mkdir -p /usr/local/nginx/modules
    [root@centos6-3 LuaJIT-2.0.4]# cd /export/software/
    [root@centos6-3 software]# mv set-misc-nginx-module-0.29.tar.gz /usr/local/nginx/modules/
    [root@centos6-3 software]# mv lua-nginx-module-0.10.0.tar.gz /usr/local/nginx/modules/
    [root@centos6-3 software]# mv ngx_devel_kit-0.2.19.tar.gz /usr/local/nginx/modules/
    [root@centos6-3 software]# mv echo-nginx-module-0.58.tar.gz /usr/local/nginx/modules/
    [root@centos6-3 software]# cd /usr/local/nginx/modules/
    [root@centos6-3 modules]# ll
    total 724
    -rw-r--r--. 1 root root  64779 Jun 26 08:38 echo-nginx-module-0.58.tar.gz
    -rw-r--r--. 1 root root 569372 Jun 26 08:41 lua-nginx-module-0.10.0.tar.gz
    -rw-r--r--. 1 root root  65029 Jun 26 08:38 ngx_devel_kit-0.2.19.tar.gz
    -rw-r--r--. 1 root root  35495 Jun 26 08:38 set-misc-nginx-module-0.29.tar.gz
    [root@centos6-3 modules]# tar -zxvf lua-nginx-module-0.10.0.tar.gz
    [root@centos6-3 modules]# tar -zxvf set-misc-nginx-module-0.29.tar.gz
    [root@centos6-3 modules]# tar -zxvf ngx_devel_kit-0.2.19.tar.gz
    [root@centos6-3 modules]# tar -zxvf echo-nginx-module-0.58.tar.gz
    [root@centos6-3 modules]# ll
    total 740
    drwxrwxr-x. 6 root root   4096 Jun 22  2015 echo-nginx-module-0.58
    -rw-r--r--. 1 root root  64779 Jun 26 08:38 echo-nginx-module-0.58.tar.gz
    drwxrwxr-x. 9 root root   4096 Jan 12  2016 lua-nginx-module-0.10.0
    -rw-r--r--. 1 root root 569372 Jun 26 08:41 lua-nginx-module-0.10.0.tar.gz
    drwxrwxr-x. 9 root root   4096 Sep 26  2013 ngx_devel_kit-0.2.19
    -rw-r--r--. 1 root root  65029 Jun 26 08:38 ngx_devel_kit-0.2.19.tar.gz
    drwxrwxr-x. 6 root root   4096 Jun 22  2015 set-misc-nginx-module-0.29
    -rw-r--r--. 1 root root  35495 Jun 26 08:38 set-misc-nginx-module-0.29.tar.gz
    [root@centos6-3 modules]# rm -rf *.tar.gz
    [root@centos6-3 modules]# ll
    total 16
    drwxrwxr-x. 6 root root 4096 Jun 22  2015 echo-nginx-module-0.58
    drwxrwxr-x. 9 root root 4096 Jan 12  2016 lua-nginx-module-0.10.0
    drwxrwxr-x. 9 root root 4096 Sep 26  2013 ngx_devel_kit-0.2.19
    drwxrwxr-x. 6 root root 4096 Jun 22  2015 set-misc-nginx-module-0.29
    [root@centos6-3 modules]# 
    

    4.6安装OpenResty

    [root@centos6-3 modules]# cd /export/software/
    [root@centos6-3 software]# ll
    total 5176
    -rw-r--r--. 1 root root  847615 Jun 26 08:38 LuaJIT-2.0.4.tar.gz
    -rw-r--r--. 1 root root  833473 Jun 26 08:38 nginx-1.8.1.tar.gz
    -rw-r--r--. 1 root root 3616491 Jun 26 08:40 openresty-1.9.7.3.tar.gz
    [root@centos6-3 software]# tar -zxvf openresty-1.9.7.3.tar.gz -C /usr/local/src/
    [root@centos6-3 software]# cd /usr/local/src/openresty-1.9.7.3/
    [root@centos6-3 openresty-1.9.7.3]# ./configure --prefix=/usr/local/openresty --with-luajit && make && make install
    [root@centos6-3 openresty-1.9.7.3]#
    

    4.7解压编译安装Nginx

    [root@centos6-3 openresty-1.9.7.3]# cd /export/software/
    [root@centos6-3 software]# ll
    total 5176
    -rw-r--r--. 1 root root  847615 Jun 26 08:38 LuaJIT-2.0.4.tar.gz
    -rw-r--r--. 1 root root  833473 Jun 26 08:38 nginx-1.8.1.tar.gz
    -rw-r--r--. 1 root root 3616491 Jun 26 08:40 openresty-1.9.7.3.tar.gz
    [root@centos6-3 software]# tar -zxvf nginx-1.8.1.tar.gz -C /usr/local/src/
    [root@centos6-3 software]# cd /usr/local/src/nginx-1.8.1/
    [root@centos6-3 nginx-1.8.1]# ./configure --prefix=/usr/local/nginx \
    > --with-ld-opt="-Wl,-rpath,/usr/local/luajit/lib" \
    > --add-module=/usr/local/nginx/modules/ngx_devel_kit-0.2.19 \
    > --add-module=/usr/local/nginx/modules/lua-nginx-module-0.10.0 \
    > --add-module=/usr/local/nginx/modules/set-misc-nginx-module-0.29 \
    > --add-module=/usr/local/nginx/modules/echo-nginx-module-0.58
    make -j2
    [root@centos6-3 nginx-1.8.1]# make install
    

    4.8启动检测安装

    [root@centos6-3 nginx-1.8.1]# cd /usr/local/nginx/
    [root@centos6-3 nginx]# ll
    total 20
    drwxr-xr-x. 2 root root 4096 Jul  3 17:09 conf
    drwxr-xr-x. 2 root root 4096 Jul  3 17:09 html
    drwxr-xr-x. 2 root root 4096 Jul  3 17:09 logs
    drwxr-xr-x. 6 root root 4096 Jul  3 16:59 modules
    drwxr-xr-x. 2 root root 4096 Jul  3 17:09 sbin
    [root@centos6-3 nginx]# ./sbin/nginx -c conf/nginx.conf
    [root@centos6-3 nginx]# 
    

    访问192.168.214.152(默认80端口)

    这里写图片描述

    后台日志处理Nginx服务器搭建成功!

    5.实施采集测试

    5.1编写index.html

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title>枣面包的面包坊</title>
    	
    		<script type="text/javascript">
    			var _maq = _maq || [];
    			_maq.push(['_setAccount', 'zaomianbao']);
    	 
    			(function() {
    				var ma = document.createElement('script'); 
    				ma.type = 'text/javascript';
    				ma.async = true;
    				ma.src = 'http://192.168.214.152/ma.js';
    				var s = document.getElementsByTagName('script')[0]; 
    				s.parentNode.insertBefore(ma, s);
    			})();
    		</script>	
    	</head>
    	<body>
    		<h1 align="center">枣面包的面包坊</h1>
    	</body>
    </html>
    

    5.2部署index.html和ma.js

    在192.168.214.150的Apache服务器部署index.html
    上传index.html到Apache目录下:/var/www/html
    注:Linux上传方式:三种方式实现Linux的文件上传下载

    [root@centos6-1 html]# rz
    rz waiting to receive.
    Starting zmodem transfer.  Press Ctrl+C to cancel.
    Transferring index.html...
      100%     568 bytes  568 bytes/sec 00:00:01       0 Errors  
    [root@centos6-1 html]# ls
    index.html
    [root@centos6-1 html]#
    

    在192.168.214.152的Nginx服务器部署ma.js
    上传ma.js到Nginx目录下:/usr/local/nginx/html

    [root@centos6-3 html]# rz
    rz waiting to receive.
    Starting zmodem transfer.  Press Ctrl+C to cancel.
    Transferring ma.js...
      100%       1 KB       1 KB/sec    00:00:01       0 Errors  
    
    [root@centos6-3 html]# ll
    total 11
    -rw-r--r--. 1 root root  537 Jul  3 17:09 50x.html
    -rw-r--r--. 1 root root 1249 Jul  3  2018 ma.js
    

    5.3修改Nginx配置文件

    将nginx.conf文件修改成上面3.5的内容,这里不做重复,读者在按照博主上面系统环境搭建部署完成后,可以直接复制配置内容使用,可以不必对配置中使用到的lua语义过分深究

    5.4启动Apache,Nginx

    启动192.168.214.150下的Apache

    [root@centos6-1 html]# httpd
    [root@centos6-1 html]# ps -ef|grep httpd
    root      42392      1  0 19:41 ?        00:00:00 httpd
    apache    42393  42392  0 19:41 ?        00:00:00 httpd
    apache    42394  42392  0 19:41 ?        00:00:00 httpd
    apache    42395  42392  0 19:41 ?        00:00:00 httpd
    apache    42396  42392  0 19:41 ?        00:00:00 httpd
    apache    42397  42392  0 19:41 ?        00:00:00 httpd
    apache    42398  42392  0 19:41 ?        00:00:00 httpd
    apache    42399  42392  0 19:41 ?        00:00:00 httpd
    apache    42400  42392  0 19:41 ?        00:00:00 httpd
    root      42404  42010  0 19:42 pts/0    00:00:00 grep httpd
    [root@centos6-1 html]# 
    

    启动192.168.214.152下的Nginx

    [root@centos6-3 nginx]# sbin/nginx -c conf/nginx.conf
    [root@centos6-3 nginx]# ps -ef|grep nginx
    root      50763      1  0 19:31 ?        00:00:00 nginx: master process sbin/nginx -c conf/nginx.conf
    nobody    50764  50763  0 19:31 ?        00:00:00 nginx: worker process        
    nobody    50765  50763  0 19:31 ?        00:00:00 nginx: worker process        
    root      50792  50325  0 19:43 pts/0    00:00:00 grep nginx
    

    5.5请求测试观察

    在192.168.214.152的nginx目录下执行命令实时观察日志变化

    [root@centos6-3 nginx]# tail -f logs/user_defined.log 
    

    页面访问192.168.214.150的index.html页面触发
    这里写图片描述
    发现请求到了ma.js文件,同时发送了log.gif请求并且状态为200,即请求成功。再去刚才实时观察的shell窗口发现日志已经被收集

    [root@centos6-3 nginx]# tail -f logs/user_defined.log
    1530618381.695||192.168.214.1||200||0||192.168.214.150||http://192.168.214.150/||\xE6\x9E\xA3\xE9\x9D\xA2\xE5\x8C\x85\xE7\x9A\x84\xE9\x9D\xA2\xE5\x8C\x85\xE5\x9D\x8A||||1050||1680||24||en-US||Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36||zaomianbao
    

    6.总结

    到这里一个整体的结构就成功构建好了,后面使用就行了,当然,这里只有访问页面的触发,并没有添加用户点击事件,这个留给读者在使用中根据业务添加即可。以上内容并没有假如日志切分的展现,读者直接添加即可。本篇博客的架构设计经过优化是可以运用到生产实际当中的。如有错误,欢迎指正。


    参考资料:

    http://openresty.org/en/
    http://nginx.org/en/download.html
    https://blog.csdn.net/weixin_37490221/article/details/80849163
    http://www.lua.org/about.html
    http://www.runoob.com/lua/lua-tutorial.html
    以及博主学习使用的PDF文档
    
    展开全文
  • Logstash 安装及日志采集需求分析安装配置启动测试FileBeat 采集日志到 LogstashLogstash 接收数据并打印Logstash 输出到 ElasticsearchLogstash 过滤器Grok 插件mutate 插件date 插件Logstash 解析所有字段并输出到...
  • 实在是想不起来在哪里下载的SyslogGather.exe,但是我的“未整理文件”中,有这么个文件,看名称就知道,是和Syslog...可以设置默认端口,默认是514,可以设置是否保存日志。如果你选择了这个选项,则日志在SyslogG...
  • TKE 的日志功能入口在 集群运维-日志规则,更多关于如何为 TKE 集群启用日志采集与基础用法,参考官方文档 日志采集。技术架构是怎样的 ?TKE 集群开启日志采集后,tke-log-agent 作为 DaemonSet...
  • TKE 的日志功能入口在 集群运维-日志规则,更多关于如何为 TKE 集群启用日志采集与基础用法,参考官方文档 日志采集。 技术架构是怎样的 ? TKE 集群开启日志采集后,tke-log-agent 作为 DaemonSet 部署在每个节点上...
  • logstash采集Java日志文本文件配合grok收集到elasticsearch简单示例logstash 配置日志文件示例kibana结果展示:参考文章: logstash 配置 input { file { path => "C:/Users/Administrator/Desktop/info*.log" ...
  • windows服务器关机日志 内容精选换一换服务器上的ICAgent被卸载后,会影响该服务器的日志采集能力,请谨慎操作!云日志服务主机管理界面,仅支持卸载安装在Linux环境中的ICAgent,如果需要卸载安装Windows环境中的...
  • 项目结构 本系列文章意在记录如何搭建一个高可用的日志采集系统,实际项目中会有多个日志文件分布在服务器各个...日志采集系统监控各个日志文件,当日志文件有日志录入时,日志采集系统实时获取日志内容并下入...
  • 今天给大家分享下 使用flume采集日志,直接将日志导入对应的hive表中,然后使用hive进行日志分析   下面就以apache access log为例   具体使用hive的外部表还是普通的表,个人决定哈   我这里就以普通表来...
  • 主旨:讲述SpringBoot项目使用LogBack日志,LogBack + Flume收集日志到Hdfs文件存储服务器的环境搭建 主要软件版本配置说明: SpringBoot-2.1.4 (windows10 IDEA DeBug模式运行) Flume-1.9.0 (部署在hadoop-...
  • windows2008服务器日志设置 内容精选换一换本节操作指导您完成Windows操作系统云服务器磁盘空间清理。弹性云服务器匀出一部分磁盘空间来充当内存使用,当内存耗尽时,云服务器可以使用虚拟内存来缓解内存的紧张。但...
  • ngnix+lua+js埋点 实现自定义日志采集 1 收集数据的页面 js埋点: 在想要手机数据的页面预先放一段js代码, 当用户发生行为时, 触发js方法, 收集数据,发到后端 http://192.168.4.101/index.html 这里的index....
  • 新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。 Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、...
  • ,想搭建一个自定义日志数据采集系统,要做以下几件事: 2.1.  确定收集信息 名称 途径 备注 访问时间 web server ...
  • windows2008服务器日志设置 内容精选换一换本节操作指导您完成Windows操作系统云服务器磁盘空间清理。弹性云服务器匀出一部分磁盘空间来充当内存使用,当内存耗尽时,云服务器可以使用虚拟内存来缓解内存的紧张。但...
  • 通过日志服务采集、分析日志 (ETA: 20 分钟) 目标 掌握阿里云日志服务基本功能 成功收集Docker中日志,利用EMR(Spark Streaming,Hive)进行日志分析 准备工作 产品基本介绍(链接) 注意事项: 日志服务当前...
  • 目前,容器服务Windows Kubernetes支持将业务容器产生的stdout输出、日志文件同步到阿里云日志服务(SLS)进行统一管理。 支撑组件安装 在Windows Kubernetes集群安装界面勾选使用日志服务,集群会安装支持日志...
  • 第二章 业务系统日志数据采集 知识回顾 数据采集定义 数据采集特点 数据采集过程 本章内容 业务系统概述 业务系统中数据产生的价值 开发语言与技术框架 微服务框架概述 业务系统日志数据采集 本章目标 了解什么是...
  • 本贴只是针对小白写的一个最基本的数据采集及入库,大神勿喷 先下载kettle,下载安装包网上搜下吧,这里用的是pdi-ce-7.1.0.0-12.zip 由于是绿色版本,解压出来后直接双击data-integration目录下spoon.bat启动程序...
  • 使用yum install java  yum install jdk 安装了java环境。 用文本编辑器写一个java程序来验证,保存在/search/bin目录,文件名:HelloWorld.java,输入如下内容:  public class Hel
  • 游戏日志分析(2):全方位数据采集 游戏日志分析(3):程序日志规范与埋点 游戏日志分析(4):线上问题定位与排查 游戏日志分析(5):数据库与日志关联分析 游戏日志分析(6):CDN/对象存储日志分析 游戏日志...
  • grok作为一个logstash的过滤插件,支持根据正则表达式解析文本日志行,拆成字段message结构化后再存储,方便kibana的搜索和统计。 nginx日志格式 ..... http { include /etc/nginx/mime.types; default_type ...
  • 本次遇到的问题描述,日志采集同步时,当单条日志(日志文件中一行日志)超过2M大小,数据无法采集同步到 kafka,分析后,共踩到如下几个坑。 1、flume采集时,通过shell+EXEC(tail -F xxx.log 的方式) source来...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,263
精华内容 2,105
关键字:

文本日志采集windows