在企业运维环境中,运维人员管理的主要对象分别是服务器、存储、网络设备、安全设备等。而在对整个企业网站进行监控时,这些设备的日志数据都需纳入到监控的范围之内。日志分析与监控,这事说大不大,说小也不小。
传统的ES开源解决方案虽然节约了应用成本,但对应的人力维护成本较高。这个中的辛酸故事毋需多言。在此介绍一种商业日志分析解决方案——日志易。好不好用暂不评论,是否拿来对比试用也取决于各位心情。
第一步自然是日志数据接入。数据源如何接入到日志易服务之中呢?

日志易的日志接入方式主要包括以下三种:

  • 日志易Agent:通过使用日志易Agent进行采集,此处方式部署版优先推荐。
  • Rsyslog Agent:使用rsyslog 5.8.0及以上版本,通过配置rsyslog agent转发本地日志文件到日志易。
  • Web方式:使用http post上传日志文件。
    这里我们先介绍Rsyslog日志接入的方式。
    Rsyslog接入既可使用手动部署,也可使用脚本部署。日志易官方站点为Rsyslog接入提供了相应脚本,这在Rsyslog脚本部署环节有相关介绍。

Ryslog手动部署

Rsyslog 手动部署要求操作人员拥有root或sudo权限。
其次需确定rsyslog版本是否为5.8.0及以上版本。Linux系统可使用rsyslog -v命令查看rsyslog版本号,如果版本号较低,可访问rsyslog网站——http://www.rsyslog.com/download/ ——下载最先版本。Rsyslog编译过程在此就不详细提及了。下面的部署步骤以rsyslog 5.8.0及其以上版本为前提进行展开。

1. 配置系统环境

如果/var/spool/rsyslog目录不存在,则创建该目录。如果是Ubuntu系统,还应确保该目录的权限。其相关脚本如下:

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

2. 更新rsyslog配置文件

编辑或创建rsyslog配置文件,将下列内容粘贴在 /etc/rsyslog.d/rizhiyi.conf配置文件中:

$ModLoad imfile
$WorkDirectory /var/spool/rsyslog

$InputFileName FILEPATH
$InputFileTag APPNAME
$InputFileStateFile stat_APPNAME
$InputFileSeverity info
$InputFilePersistStateInterval 20000
$RepeatedMsgReduction off
$InputRunFileMonitor
$InputFilePollInterval 3
$template RizhiyiFormat_APPNAME,"<%pri%>%protocol-version% %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msgid% [TOKEN@32473 tag=\"TAG\"] %msg%\n"

if $programname == 'APPNAME' then @@log.rizhiyi.com:5140;RizhiyiFormat_APPNAME
if $programname == 'APPNAME' then ~

配置文件参数替换说明:

  • TOKEN: 使用“运行--用户标识”页面中的用户标识符替换它。示例:ba1f2511fc30423bdbb183fe33f3dd0f
  • FILEPATH: 需要上传的日志文件的绝对路径,必须包含日志文件名。示例:/var/log/nginx/access.log
  • APPNAME: 用于标识上传的唯一应用来源,可用来定义日志分组,这将帮助使用者有效划分日志,缩小搜索范围。APPNAME设置正确与否直接影响到后台对日志字段的提取。Appname由英文、数字及下划线组成。不可以与/etc/rsyslog.d下已有的配置重复(通过rsyslog上传时也不能包含空格),否则会导致新配置的token和tag不生效。如果您是VIP用户,日志易为您定制了日志解析规则,请填写日志易提供的针对该日志的APPNAME,以使定制的日志解析规则生效。示例:nginx_access
  • TAG: 标签,标识日志的扩展信息,可定义多个标识,这里替换为您自行定义的标签,可用来定义日志分组,这将帮助使用者有效划分日志,缩小搜索范围。示例: rizhiyi_search

注意
在 /etc/rsyslog.d/ 下的rsyslog配置文件中:

  • $InputFileTag定义的APPNAME必须唯一,同一台主机上不同的应用应当使用不同的APPNAME,否则会导致新定义的TOKEN和TAG不生效;
  • $template定义的模板名必须唯一,否则会导致新定义的TOKEN和TAG不生效;
  • $InputFileStateFile定义的StateFile必须唯一,它被rsyslog用于记录文件上传进度,否则会导致混乱;
  • @@log.rizhiyi.com:5140 用于指定接收日志的服务器域名或者主机名。默认是 log.rizhiyi.com:5140
  • Ubuntu系统因为rsyslog是以syslog用户运行,所以会存在因为无读权限而无法采集日志的问题。为了检查syslog用户是否有权限读取日志文件可以用 su -s /bin/sh -c "head -n 1 /PATH/TO/YOUR/LOGFILE" syslog 命令验证

3. 重启rsyslog

$ sudo service rsyslog restart

4. 验证

例如,配置文件中的tag字段已修改为"accesslog",可使用"tag:accesslog" 搜索过去一小时的事件,检查日志易是否成功接收并正确识别日志,建立索引可能需要几十秒钟时间,需要等待几十秒钟。

Rsyslog脚本部署

通用的Linux平台上,Rsyslog脚本部署需要满足以下基础条件:

  • Rsyslog为5.8.0或更高版本(较低版本可访问rsyslog网站下载更新);
  • 拥有root或sudo权限;
    配置完成后,新增的日志文件将默认通过514端口发送到日志易。

可以使用日志易提供的configure_linux_rsyslog.sh 脚本自动初始化运行环境并生成配置文件,以便上传日志。在Linux系统上相关执行命令如下:

curl -O https://www.rizhiyi.com/install/configure_linux_rsyslog.sh
chmod 755 configure_linux_rsyslog.sh
sudo ./configure_linux_rsyslog.sh -h RIZHIYI_LOG_SERVER_ADDRESS -t YOUR_TOKEN --filepath /PATH/TO/YOUR/LOGFILE --appname TYPE_OF_YOUR_LOG --tag CUSTOM_ATTRIBUTES_OF_YOUR_LOG 

相关参数说明如下:

  • -h RIZHIYI_LOG_SERVER_ADDRESS:后跟地址为负责接收日志的日志易服务器域名。
    示例:-h log.u.rizhiyi.com
  • -t YOUR_TOKEN:后跟用户的token。获取方法:当您开始设置帐户,可以通过进入日志易页面"运行" --> "用户标识",查看用户标识符。
    示例:-t ba1f2511fc30423bdbb183fe33f3dd0f
  • --filepath /PATH/TO/YOUR/LOGFILE:后跟需要上传的日志文件的绝对路径,必须包含日志文件名。
    示例:--filepath /var/log/nginx/access.log
  • --appname TYPE_OF_YOUR_LOG:需要上传的日志类型。appname设置正确与否直接影响到后台对日志字段的提取。如果您是VIP用户,请填写日志易提供的针对该日志的appname。
    示例: --appname nginx_access
    注意:appname不可以与/etc/rsyslog.d下已有的配置重复,否则会导致新配置的token和tag不生效。如果你需要用同一个appname上传多个日志文件,请参考手动配置rsyslog。
  • --tag CUSTOM_ATTRIBUTES_OF_YOUR_LOG:后跟用户自定义属性标签,日志上传后可以根据该tag进行搜索或定义日志分组;用户可配置多个tag,多个tag之间使用英文半角逗号分隔,中间不能有空格。
    示例:--tag rizhiyi_search 或 --tag tag1,tag2,tag3
    错误用例:--tag tag1, tag2 由于tag1与tag2之间有额外的空格,tag2将不被识别。

脚本解释
该脚本将进行以下系统检测及操作,以确保上传日志的系统与日志易兼容。配置系统的内容与手动配置rsyslog中相同,即通过编写/etc/rsyslog.d/rizhiyi.conf 配置文件来实现rsyslog日志上传。配置完成后,重启rsyslog服务则配置生效,在日志易端如果能够检索到日志信息,则配置成功。
系统检测和配置过程包括如下几步:

  1. 检查脚本是否支持操作系统,如果否,则退出(仅支持Linux,不支持Windows或Mac OS);
  2. 检查Linux发行版本是否是CentOS、Redhat、Ubuntu,如果否,则退出;
  3. 检查用户是否有root权限运行脚本;
  4. 检查selinux服务是否执行,如果是,提示用户手动关闭并退出脚本;
  5. 检查主机名(hostname)是否为空、localhost或127.0.0.1,如果是,则警告后退出;
  6. 检查rsyslog的版本是否至少是5.8.0,如果不符合条件,则退出;
  7. 检查rsyslog是否配置为系统服务自动启动,如果否,则退出;
  8. 检查网络连通性,如果有问题,通知用户检查网络连接并退出;
  9. 在rsyslog配置文件目录/etc/rsyslog.d/下生成配置文件;
  10. 重启rsyslog服务。

上传网络设备日志

路由器、交换机、负载均衡、***防护系统等网络设备,可以通过syslog输出日志。使用本地的中央rsyslog可转发这些日志给日志易。
大多数网络设备使用旧的非结构化的日志格式,并使用UDP协议传输。日志易使用新的RFC5424标准来结构化日志,使用更可靠的TCP传输协议。以下将展示将旧日志转换为这种新的标准格式,并通过Linux系统的rsyslog协议转发到日志易的配置。

日志易数据接入之 Syslog 日志上传_第1张图片

Linux后端配置步骤如下:

1. 添加UDP输入

创建一个新的UDP配置文件或打开现有的:
sudo vim /etc/rsyslog.d/forward_udp_2_tcp.conf
复制并粘贴以下内容配置启用syslog,默认 UDP输入端口为514,会通过TCP协议转发数据到collector01的5140端口

# Modules
$ModLoad imudp
$UDPServerRun 514
# log every host in its own directory
$template RemoteHost,"/data/syslog/%$YEAR%-%$MONTH%-%$DAY%/%HOSTNAME%.log"

# 写本地文件
$template LocalFileFormat,"%timestamp:::date-rfc3339% %HOSTNAME% %syslogfacility-text% %syslogseverity-text% %syslogtag%%msg%\n"
# 写远程Collector,这里将appname固定为"switch",注意修改token和tag
$template RizhiyiFormat,"<%pri%>%protocol-version% %timestamp:::date-rfc3339% %HOSTNAME% switch %procid% %msgid% [your-token@32473 tag=\"udp\"]%msg%\n"

# 发送数据,注意修改collector01为具体的collector地址
#if $inputname == 'imudp' then ?RemoteHost;LocalFileFormat
if $inputname == 'imudp' then @@collector01:5140;RizhiyiFormat
if $inputname == 'imudp' then ~

重启rsyslog进程:

sudo service rsyslog restart

2. 发送一条测试日志

使用netcat发送一条测试日志,使用rsyslog来验证能够接收UDP信息:

echo ":hello" | nc -u -w 1 localhost 514

该消息应显示在您的系统日志和日志易中,可使用 tail -f 查看日志内容。

3. 配置网络设备

获取本地中央rsyslog的IP地址,然后配置网络设备发送日志到这个IP,请查看您的网络设备文档进行配置。
ifconfig eth0

4. 校验:

搜索过去一小时的网络设备日志。这可能需要几十秒钟的时间来索引日志。

日志易端配置

当我们把数据源的rsyslog转发配置添加了日志易服务器的主机名后,还要在日志易系统里开启相应的端口接收数据。其相关配置如下:

  1. 进入日志易界面,点击左侧菜单栏“设置——Agent管理”,点击数据源的IP地址,点击“添加”。在“选择来源”中选择“Syslog”,在右侧需要配置监听的IP和端口和协议信息处,通常我们会用监听UDP的514,用来接收Syslog;
    日志易数据接入之 Syslog 日志上传_第2张图片
    日志易数据接入之 Syslog 日志上传
    日志易数据接入之 Syslog 日志上传_第3张图片
    日志易数据接入之 Syslog 日志上传_第4张图片
  2. 配置好监听端口信息后,点击下一步,配置IP映射;

    所谓IP映射,是指为不同IP发来的Syslog标注不同的appname、tag和编码。 IP支持192.168.1. 的通配符配法, 但 必须单独占据某一段,而不能是192.1*8.1.1。靠前的映射优先被匹配。

  3. 配置好IP映射后,点击下一步,进入最后检查页面:;
  4. 检查无误后,点击下一步,完成Syslog数据源的添加。

Syslog 数据接入日志易端配置可点击 轻松实现 Syslog 数据接入 | “3 分钟玩转日志易” 系列一查看相关视频。