开源免费日志服务ELK Syack代替syslog

一、ELK Stack 采集 syslog 日志的主要方式

通常,ELK Stack 使用 Logstash 或者 Filebeat 来采集 syslog 日志。 Beats 通常更轻量级,适合作为代理部署在各个日志源服务器上,而 Logstash 则功能更强大,可以进行更复杂的日志处理和转换。 选择 Logstash 还是 Filebeat 取决于你的具体需求和环境规模。

1、使用 Logstash 采集 syslog

Logstash 拥有专门的 syslog 输入插件 (input plugin),可以直接监听 syslog 协议传输的日志消息。 这是采集 syslog 日志最常见和推荐的方式。

  • Logstash syslog 输入插件的优势:

    • 直接监听 syslog 协议: 无需将 syslog 日志写入文件,直接从网络端口接收 syslog 消息,实时性更高。
    • 支持 UDP 和 TCP 协议: 兼容常见的 syslog 传输协议。
    • 内置 Grok 模式 : syslog 输入插件通常会配合 grok 过滤器插件一起使用,方便解析 syslog 消息的结构化字段。
    • 性能良好: Logstash 可以高效地处理大量的 syslog 消息。
  • Logstash syslog 输入插件配置要点:

    • port : 指定 Logstash 监听的端口,syslog 默认端口通常是 514。 需要确保防火墙允许流量通过该端口。
    • protocol : 指定 syslog 协议,可以是 udptcp。 syslog 默认协议通常是 UDP,但 TCP 更可靠。
    • type : 为 syslog 日志指定一个类型 (type),方便在后续的 Filter 和 Kibana 中识别和处理 syslog 日志。 例如可以设置为 "syslog"
    • grok_pattern : (可选但强烈建议) 使用 Grok 模式来解析 syslog 消息内容,提取有用的字段,例如时间戳、主机名、进程名、日志级别、消息内容等。 常用的 Grok 模式包括 SYSLOGLINE (用于通用 syslog 格式) 和 CISCOSYSLOGLINE (用于 Cisco 设备 syslog 格式)。
  • Logstash syslog 输入插件配置示例 (logstash.conf):

    假设我们要监听 UDP 端口 514,采集 syslog 日志,并使用 SYSLOGLINE Grok 模式解析通用 syslog 格式的日志。

    input {
      syslog {
        port => 514
        protocol => "udp"
        type => "syslog"
      }
    }
    
    filter {
      grok {
        match => { "message" => "%{SYSLOGLINE}" }
      }
      date {
        match => [ "timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ] # 匹配 syslog 常见的时间戳格式
        remove_field => ["timestamp"] # 删除原始的 timestamp 字段,使用 @timestamp 作为标准时间字段
      }
    }
    
    output {
      elasticsearch {
        hosts => ["http://<Elasticsearch服务器IP>:9200"] # 替换为你的 Elasticsearch 服务器地址
        index => "syslog-%{+YYYY.MM.dd}" #  索引名称,按天创建索引
      }
      stdout { codec => rubydebug } #  同时输出到控制台,方便调试
    }
    

    配置说明:

    • input syslog : 配置 syslog 输入插件,监听 UDP 端口 514,类型设置为 "syslog"。
    • filter grok : 使用 grok 过滤器,match 定义匹配规则,"message" => "%{SYSLOGLINE}" 表示对 message 字段(syslog 消息内容)应用 SYSLOGLINE Grok 模式进行解析。 SYSLOGLINE 是 Logstash 内置的 Grok 模式,用于解析通用的 syslog 格式。 你可以根据实际的 syslog 日志格式调整 Grok 模式,或者自定义 Grok 模式。
    • filter date : 由于 syslog 日志的时间戳格式可能与 Elasticsearch 默认的时间格式不同,使用 date 过滤器来解析时间戳字段。 match 定义要匹配的字段和时间格式。 target => "@timestamp" 将解析后的时间戳设置为 @timestamp 字段,这是 Elasticsearch 标准的时间字段。
    • output elasticsearch : 配置 Elasticsearch 输出插件,将解析后的 syslog 日志输出到 Elasticsearch 中。 hosts 指定 Elasticsearch 服务器地址,index 定义索引名称,使用日期动态索引 syslog-%{+YYYY.MM.dd},方便按日期管理索引。
    • output stdout : stdout 输出插件用于将日志输出到控制台,codec => rubydebug 以易于阅读的 Rubydebug 格式输出,方便调试 Logstash 配置。 生产环境中可以移除 stdout 输出。
  • 配置 syslog 发送端 (设备或服务器):

    你需要配置你的 syslog 发送端设备或服务器,将 syslog 日志发送到 Logstash 服务器的 IP 地址和配置的端口 (例如 UDP 514)。 具体的配置方法取决于你的设备或操作系统的类型。 例如,在 Linux 系统中,可以配置 rsyslogsyslog-ng 服务将日志转发到远程 Logstash 服务器。 网络设备 (如路由器、交换机、防火墙) 通常也有 syslog 输出配置选项。

2、使用 Filebeat 采集 syslog (读取 syslog 文件)

如果你的 syslog 服务配置为将日志写入本地文件 (例如 Linux 系统中常见的 /var/log/messages/var/log/syslog),你可以使用 Filebeat 来读取这些 syslog 文件,并将日志发送到 Logstash 或 Elasticsearch。

  • Filebeat log 输入配置要点:

    • paths : 指定要监控的 syslog 日志文件路径,可以使用通配符 *
    • output.logstashoutput.elasticsearch: 配置 Filebeat 的输出目的地,可以将数据直接发送到 Elasticsearch,也可以发送到 Logstash 进行更复杂的处理。
    • processors : Filebeat 提供了 processors 功能,可以在数据发送之前进行一些简单的处理,例如使用 decode_cef 处理器解析 CEF 格式的 syslog 日志,或者使用 grok 处理器进行简单的 Grok 解析。
  • Filebeat 配置文件示例 (filebeat.yml):

    假设我们要采集 /var/log/syslog 文件中的 syslog 日志,并将数据发送到 Logstash 进行进一步处理。

    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - "/var/log/syslog"
      tags: ["syslog"] # 添加 tag,方便在 Logstash 中识别 syslog 日志
    
    output.logstash:
      hosts: ["<Logstash服务器IP>:5044"] # 替换为你的 Logstash 服务器地址和 Beats 输入端口 (默认 5044)
    

    Logstash Pipeline 配置 (logstash.conf):

    在 Logstash 端,你需要配置 Beats 输入插件 (beats input plugin) 来接收 Filebeat 发送的数据,并进行后续处理 (例如 Grok 解析) 和输出到 Elasticsearch。

    input {
      beats {
        port => 5044 # Beats 默认输出端口
      }
    }
    
    filter {
      if "syslog" in [tags] { #  根据 Filebeat 添加的 tag 判断是否为 syslog 日志
        grok {
          match => { "message" => "%{SYSLOGLINE}" }
        }
        date {
          match => [ "timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
          remove_field => ["timestamp"]
        }
      }
    }
    
    output {
      elasticsearch {
        hosts => ["http://<Elasticsearch服务器IP>:9200"]
        index => "filebeat-syslog-%{+YYYY.MM.dd}" #  Filebeat 采集的 syslog 日志索引
      }
      stdout { codec => rubydebug }
    }
    

    配置说明:

    • Filebeat 配置 :
      • filebeat.inputs: 配置 log 输入类型,启用并指定要监控的 syslog 文件路径 /var/log/syslog
      • tags: ["syslog"]: 为采集到的日志添加 syslog 标签,方便在 Logstash 中识别和过滤。
      • output.logstash: 配置输出到 Logstash,指定 Logstash 服务器地址和 Beats 输入端口。
    • Logstash 配置 :
      • input beats: 配置 beats 输入插件,监听 Beats 默认的 5044 端口,接收 Filebeat 发送的数据。
      • filter: 使用 if "syslog" in [tags] 判断是否为 Filebeat 发送的 syslog 日志 (通过检查 tags 字段)。 如果是,则应用 Grok 和 Date 过滤器进行解析和时间戳处理。
      • output elasticsearch: 配置 Elasticsearch 输出,索引名称可以设置为 filebeat-syslog-%{+YYYY.MM.dd},以区分 Logstash 直接监听 syslog 端口采集的日志。

3、直接使用 Beats 模块 (System 模块)

Beats (尤其是 Filebeat 和 Metricbeat) 提供了 模块 (Modules) 功能,预配置了采集特定类型日志和指标的方案,简化了配置。 Filebeat 的 System 模块 就包含了采集 syslog 日志的配置。

  • 启用 Filebeat System 模块:

    在 Filebeat 目录下,执行命令启用 System 模块:

    ./filebeat modules enable system
    
  • 查看 System 模块配置:

    启用模块后,Filebeat 的配置文件 modules.d/system.yml 会被启用 (取消注释),你可以查看和修改该文件中的配置。 System 模块默认会采集 /var/log/syslog/var/log/auth.log 等系统日志文件。

  • Filebeat System 模块 syslog 配置 (modules.d/system.yml 示例):

    - module: system
      syslog:
        enabled: true
        var.paths: ["/var/log/syslog*", "/var/log/messages*"]  # 默认监控的 syslog 文件路径
    
      auth:
        enabled: true
        var.paths: ["/var/log/auth.log*", "/var/log/secure*"]  # 默认监控的 auth 日志文件路径
    
  • 输出配置 (filebeat.yml):

    配置 Filebeat 的输出,例如直接输出到 Elasticsearch:

    output.elasticsearch:
      hosts: ["http://<Elasticsearch服务器IP>:9200"]
      # username: "filebeat_internal"
      # password: "YOUR_PASSWORD"
    
  • 启动 Filebeat:

    启动 Filebeat 后,System 模块会自动开始采集配置的 syslog 日志文件,并发送到 Elasticsearch。

  • Kibana Dashboard:

    Filebeat System 模块还提供预置的 Kibana Dashboards,可以方便地可视化系统日志数据。 在首次启动 Filebeat 或执行 ./filebeat setup 命令时,Filebeat 会将这些 Dashboards 导入到 Kibana 中。

4、选择哪种方式?

  • 推荐使用 Logstash syslog 输入插件 直接监听 syslog 端口来采集 syslog 日志,特别是当你需要实时采集大量的 syslog 数据,并且需要对 syslog 数据进行复杂的解析和转换时。 这种方式性能高,实时性好。
  • 如果你的 syslog 服务已经配置为将日志写入文件,并且只需要进行简单的采集,可以使用 Filebeat 读取 syslog 文件并发送到 Logstash 或 Elasticsearch。 Filebeat 更轻量级,资源消耗更低。
  • 如果你的需求比较简单,只需要采集常见的 Linux 系统 syslog 日志,并且希望快速上手,可以使用 Filebeat System 模块。 System 模块配置简单,且提供预置的 Kibana Dashboards。

ELK Stack 能够非常有效地采集 syslog 中的日志,并且提供了多种灵活的方式来满足不同的需求。 你可以根据你的实际场景、数据量、性能要求以及对日志处理的复杂程度,选择合适的采集方式(Logstash syslog 输入插件、Filebeat 读取 syslog 文件或 Filebeat System 模块)。 无论选择哪种方式,ELK Stack 强大的搜索、分析和可视化能力都能帮助你更好地管理和分析 syslog 日志数据,从而进行故障排查、安全分析、性能监控等。

二、深入理解直接使用Logstash监听syslog协议

直接使用 Logstash 的 syslog 输入插件来监听 syslog 协议,通常情况下是不需要在运行 Logstash 的服务器上额外安装传统的 syslog 服务(例如 rsyslogsyslog-ng)的。

下面详细解释一下原因:

1、Logstash syslog 输入插件的功能

  • 自带 syslog 服务器功能 : Logstash 的 syslog 输入插件本身就具备 syslog 服务器 的功能。 它能够监听指定的网络端口(例如 UDP 端口 514 或 TCP 端口 514),并按照 syslog 协议规范接收来自网络中其他设备或系统发送的 syslog 消息。

  • 独立监听 : 这个插件是 Logstash 自身的功能模块,它直接在 Logstash 进程内部运行,监听网络端口,接收和处理 syslog 数据流。 它 不依赖于 操作系统层面安装的 syslog 服务(如 rsyslogsyslog-ng)来完成接收 syslog 消息的任务。

2、传统 syslog 服务 (rsyslog, syslog-ng) 的角色

  • 本地日志管理和转发 : 传统的 syslog 服务(例如 rsyslogsyslog-ng)的主要职责是在 本地系统 上:

    • 接收本地程序生成的日志: 收集运行在同一台服务器上的应用程序和系统组件产生的日志。
    • 本地日志存储: 将日志写入本地文件,进行本地的日志存储和管理。
    • 日志转发 : 可以将本地收集到的日志 转发远程的 syslog 服务器
  • 作为 syslog 客户端 : 当需要将一台服务器或设备上的本地日志发送到远程 ELK Stack 进行集中管理和分析时,传统 syslog 服务通常 扮演 syslog 客户端的角色 ,负责将本地日志通过 syslog 协议 发送 到 Logstash 服务器。

3、Logstash syslog 输入插件 vs. 传统 syslog 服务

  • 功能侧重点不同:

    • Logstash syslog 输入插件 : 专注于 接收和解析 来自 网络 的 syslog 消息,目的是将这些消息 导入到 ELK Stack 进行进一步处理和分析。 它主要关注 远程日志的采集
    • 传统 syslog 服务 (rsyslog, syslog-ng) : 侧重于 本地日志的收集、存储和管理 ,以及 日志转发 功能。 它主要关注 本地日志的管理和远程日志的发送
  • 是否需要安装:

    • Logstash syslog 输入插件 : 不需要额外安装 syslog 服务 。 只要你的 Logstash 实例运行起来,配置了 syslog 输入插件,它就能直接监听端口接收 syslog 消息。
    • 传统 syslog 服务 (rsyslog, syslog-ng) : 通常 预装在大多数 Linux 系统中 (例如 rsyslog 是很多发行版的默认 syslog 服务)。 如果你需要在 本地 收集和管理日志,或者需要将 本地日志转发 到远程服务器,那么就需要配置和使用这些传统的 syslog 服务。

4、应用场景举例说明

  1. 集中采集网络设备 Syslog 到 ELK Stack

    • 场景:你需要将网络设备(例如路由器、交换机、防火墙)产生的 syslog 日志集中采集到 ELK Stack 进行安全分析和监控。
    • 部署方式:
      • 在 ELK Stack 服务器上运行 Logstash,并配置 syslog 输入插件监听 UDP 端口 514。
      • 在网络设备上配置 syslog 输出,将 syslog 日志 发送到 Logstash 服务器的 IP 地址和端口 514
      • 不需要 在 Logstash 服务器上安装 rsyslogsyslog-ng
    • 工作流程:网络设备直接将 syslog 消息发送给 Logstash 服务器的 514 端口,Logstash syslog 输入插件接收并处理这些消息,然后导入 ELK Stack。
  2. 服务器本地日志采集并转发到 ELK Stack

    • 场景:你需要采集 Linux 服务器自身的系统日志 (例如 /var/log/syslog, /var/log/messages),并发送到 ELK Stack 进行分析。
    • 部署方式 (方案一:使用 Logstash syslog 输入插件):
      • 在 ELK Stack 服务器上运行 Logstash,配置 syslog 输入插件监听 UDP 端口 514。
      • 在 Linux 服务器上,配置 本地的 rsyslogsyslog-ng 服务 ,将其配置为 syslog 客户端 ,将本地系统日志 转发 到 Logstash 服务器的 IP 地址和端口 514。
      • 需要 本地服务器运行 rsyslogsyslog-ng 作为 syslog 客户端来转发日志。 不需要 在 Logstash 服务器上额外安装 syslog 服务,因为 Logstash 已经自带 syslog 服务器功能。
    • 部署方式 (方案二:使用 Filebeat 读取日志文件):
      • 在 Linux 服务器上安装 Filebeat。
      • 配置 Filebeat 读取本地的系统日志文件 (例如 /var/log/syslog)。
      • 配置 Filebeat 将日志 直接发送到 Elasticsearch 或 Logstash
      • 在 ELK Stack 服务器上运行 Elasticsearch 和 Kibana (如果 Filebeat 直接发送到 Elasticsearch) 或 Logstash (如果 Filebeat 发送到 Logstash 进行处理)。
      • 不需要 在 ELK Stack 服务器上安装 syslog 服务,也 不需要 在 Linux 服务器上配置 syslog 服务进行转发(Filebeat 直接读取日志文件)。

5、总结

  • Logstash 的 syslog 输入插件 提供了 内置的 syslog 服务器功能 ,可以独立接收和处理 syslog 消息, 无需依赖 操作系统层面的传统 syslog 服务来接收 syslog 数据。
  • 传统 syslog 服务 (rsyslog, syslog-ng) 在 ELK Stack 场景中,通常作为 syslog 客户端 的角色出现,负责将 本地日志转发 到远程的 Logstash 服务器,或者用于 本地日志的收集和管理

因此,如果你只是想使用 ELK Stack 直接监听 来自网络设备的 syslog 协议数据,那么 不需要 在运行 Logstash 的服务器上安装 rsyslogsyslog-ng。 Logstash 的 syslog 输入插件已经足够胜任 syslog 服务器的角色了。 你只需要确保 Logstash 服务器的网络端口(例如 514)对外开放,并且网络设备配置正确,将 syslog 日志发送到 Logstash 服务器即可。

三、示例:IBM ISVA配置使用ELK Stack

当需要在 IBM ISVA 或其他支持 syslog 输出的设备上配置日志目标时,您可以将运行 Logstash 的服务器当作一个 syslog 服务器来对待。

以下是如何实现这个目标的核心思路和步骤:

1、配置 Logstash 作为 Syslog 服务器 (监听 Syslog 接口):

  • 使用 syslog 输入插件: 在您的 Logstash 配置文件中,使用 syslog 输入插件来定义 Logstash 监听 syslog 协议的接口。

  • 指定监听端口和协议:syslog 输入插件的配置中,您需要指定 Logstash 监听的端口(通常是 UDP 端口 514,或者 TCP 端口 514,取决于您的需求和 IBM ISVA 的配置选项)以及协议类型 (UDP 或 TCP)。

  • 示例 Logstash 配置 (片段,input 部分):

    input {
      syslog {
        port => 514           # 监听 514 端口 (默认 syslog UDP 端口)
        protocol => "udp"     # 使用 UDP 协议 (如果 IBM ISVA 也配置为 UDP)
        type => "isva-syslog" # 为来自 ISVA 的 syslog 日志添加类型标签,方便后续处理
      }
    }
    
    • 重要: 请确保运行 Logstash 的服务器的防火墙允许来自 IBM ISVA 的 syslog 流量通过您配置的端口 (例如 UDP 514)。

2、配置 IBM ISVA 的 Syslog 输出:

  • 找到 Syslog 配置选项: 在 IBM ISVA 的管理界面或配置工具中,找到关于日志记录或事件输出的相关配置,通常会有一个配置 syslog 服务器的选项。 具体位置和名称可能因 ISVA 版本而异,但通常会在系统设置、日志设置、事件转发等部分。

  • 配置 Syslog 服务器地址: 在 ISVA 的 syslog 配置中,您需要指定:

    • Syslog 服务器 IP 地址: 填写运行 Logstash 的服务器的 IP 地址。
    • Syslog 服务器端口: 填写您在 Logstash syslog 输入插件中配置的端口 (例如 514)。
    • Syslog 协议: 选择与 Logstash 配置一致的协议类型 (UDP 或 TCP)。 如果可以选择,TCP 通常更可靠,但 UDP 更常用在 syslog 场景中。
    • Syslog 格式 (可选): 某些设备可能允许您选择 syslog 输出的格式(例如 RFC3164, RFC5424 等)。 通常默认格式即可,Logstash 的 syslog 输入插件能够处理多种常见的 syslog 格式。
    • 要发送的日志类型/事件: IBM ISVA 通常会允许您选择要通过 syslog 发送的日志类型或事件级别,例如审计日志、系统日志、安全事件等。 根据您的需求选择要发送的日志类型。
  • 配置示例 (概念性,具体界面和选项以 IBM ISVA 文档为准):

    假设在 ISVA 管理界面中找到 syslog 配置部分,您可能需要填写类似以下的信息:

    • 启用 Syslog 输出: [复选框] (勾选以启用)
    • Syslog 服务器 IP 地址: [运行 Logstash 的服务器 IP 地址] (例如 192.168.1.100)
    • Syslog 服务器端口: [514]
    • Syslog 协议: [UDP] (或 [TCP],如果 Logstash 配置为 TCP)
    • Syslog 格式: [RFC3164] (或其他默认格式)
    • 发送的日志类型: [审计日志], [系统事件], [安全事件] (根据您的需求选择)

3、配置 Logstash Pipeline 后续处理 (Filter 和 Output):

  • Filter 插件 (可选但推荐): 您可能需要使用 Logstash 的 Filter 插件,例如 grok 插件,来解析来自 IBM ISVA 的 syslog 日志消息,提取结构化字段,例如时间戳、事件类型、用户、源 IP 地址等,以便更好地进行搜索、分析和可视化。

  • Output 插件 (必须): 配置 Logstash 的 Output 插件,将接收和处理后的 IBM ISVA syslog 日志数据输出到 Elasticsearch 中进行存储和索引。 通常使用 elasticsearch 输出插件。

  • 示例 Logstash 配置 (片段,filteroutput 部分 - 可能需要根据 ISVA 日志格式调整):

    filter {
      if [type] == "isva-syslog" { # 针对 ISVA syslog 日志进行处理
        grok {
          #  这里需要根据 IBM ISVA syslog 的实际日志格式编写 Grok 表达式
          #  示例 (可能需要调整):  %{SYSLOGTIMESTAMP:syslog_timestamp} %{HOSTNAME:isva_hostname} %{GREEDYDATA:isva_message}
          match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{HOSTNAME:isva_hostname} %{GREEDYDATA:isva_message}" }
        }
        date {
          match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ] # 解析 syslog 时间戳
          target => "@timestamp" # 将解析后的时间戳设置为标准 @timestamp 字段
          remove_field => ["syslog_timestamp"] # 删除临时字段
        }
      }
    }
    
    output {
      elasticsearch {
        hosts => ["http://<Elasticsearch服务器IP>:9200"] # 替换为您的 Elasticsearch 服务器地址
        index => "isva-syslog-%{+YYYY.MM.dd}" #  为 ISVA syslog 日志创建独立的索引
      }
      stdout { codec => rubydebug } #  方便调试,生产环境可以移除
    }
    

4、在 Kibana 中可视化和分析 IBM ISVA Syslog 日志:

  • 创建 Index Pattern: 在 Kibana 中创建 Index Pattern,例如 isva-syslog-*,指向您在 Logstash 配置中定义的 Elasticsearch 索引。
  • 使用 Discover 和 Visualize: 使用 Kibana 的 Discover 功能探索和搜索来自 IBM ISVA 的 syslog 日志数据。 创建各种可视化图表 (例如仪表盘) 来监控和分析 ISVA 的运行状态、安全事件等。

5、总结:

通过以上配置,您就可以成功地将 ELK Stack (Logstash) 作为 syslog 服务器使用,直接接收来自 IBM ISVA (或其他支持 syslog 输出的设备) 的日志,并利用 ELK Stack 强大的功能进行日志管理、分析和可视化。 这种方式非常灵活且高效,能够帮助您集中监控和分析各种来源的日志数据。

相关推荐
修己xj5 小时前
Calibre-Web-Automated:打造你的私人图书馆
开源
勤不了一点6 小时前
【ELK】ElasticSearch 集群常用管理API操作
linux·elk·elasticsearch
FIT2CLOUD飞致云9 小时前
AI应用加速落地丨MaxKB正在被政府、公共事业、教育和医疗行业用户广泛采纳
人工智能·开源
小奏技术16 小时前
typescript选择go重写性能提升10倍,为什么不是rust呢
typescript·开源
NocoBase16 小时前
NocoBase v1.6.0 正式版发布
低代码·开源·资讯
说私域17 小时前
开源链动2+1模式AI智能名片S2B2C商城小程序在KOC参与门店做透中的应用探索
人工智能·小程序·开源
长沙红胖子Qt17 小时前
OpenCV开发笔记(八十三):图像remap实现哈哈镜效果
opencv·开源
蚝油菜花17 小时前
Anus:公开整活!完全用 Manus 复刻 Manus 功能的开源 AI 智能体项目
人工智能·开源
Wiktok1 天前
ThinkPHP框架中各模块通过MVC架构和扩展机制协同工作形成完整的请求处理流程
开源·php·mvc