Splunk智能运维学习笔记一

一、前言

前面的章节我们已经学习了如何去简单的安装Splunk Enterprise,然后通过Webb去访问Server,现在我们马上进入正题,如何去通过Splunk来进行一些有意思的操作,我们通过《Splunk智能运维实战》一书来记录我们的学习过程,我的实验环境是Centos7.5 Splunk Enterprise 7.2.6,Splunk的安装可以参考我的Splunk Enterprise学习笔记,学习的过程当中也会根据Splunk的文档来作补充
服务器环境信息:

  • Splunk Enterprise服务器 10.8.8.2
  • 被采集linux主机 10.8.8.3
  • 被采集windows主机 10.8.8.4

二、利用Splunk进行数据导入

2.1.简介

Splunk导入数据也可以叫索引数据,因为索引是Splunk的数据存储区,存取速度很快,可以索引任何数据,尤其是时间序列数据,可以检索并根据分布式服务器进行扩展,同时索引的数据会Splunk会分配一个源类型,当然你也可以自定义,当索引器把数据索引到Splunk的时候源类型会添加到数据上,用户执行字段提取或搜索数据时数据源类型是很关键的一个字段。

2.2.索引文件和目录

2.2.1.监视本地文件和目录

2.2.1.1.GUI方式导入

Splunk可以持续的监控写入文件的数据或添加到目录中的新文件,并能够索引这些数据,Splunk可以基于文件的位置监控单一的文件也能够扫描目录下的所有文件,以监控linux系统日志/ar/log/messages为例。
按照以下步骤监控并索引文件内容
1、登陆Splunk Server
2、单击“添加数据”
05hahahh
3、单击“监视”
05ggggg
4、05hhh
5、点击“另存为”自定义源类型
05rrrr
6、保存后,点击下一步,点击检查
05llll
7、提交
05yyy
8、暂时忽略其他设定,点击“开始搜索”,在搜索框中输入sourcetype=linux_messages就可以搜索到我们想要的数据了
上面这一系列操作的原理是什么呢?
当添加一个新的文件或者目录来导入数据时,也就是像后台的inputs.conf添加配置节,inputs.conf位于Splunk安装目录下的etc/system/local,Splunk使用的输入类型时监控器,设定为指向文件或者目录,如果是对一个目录进行监控,目录中的所有文件都会被监控,Splunk监控数据时它会从头读取能读的数据,完成后Splunk保留上次读取数据的位置记录,如有新的数据写入文件它将读取数据继续记录

2.2.2.2.CMI方式导入

linux系统还可以通过命令行的方式来添加数据文件或目录
splunk add monitor /var/log/secure -sourcetype linux_ssh
这里需要输入账号密码
完成会有提示 Added monitor of '/var/log/secure'

2.2.2.3.inputs.conf方式导入
cat <<EOF>> Splunk安装目录/etc/system/local/inputs.conf
[monitor:///var/log/anaconda/syslog]
sourcetype=linux_sys
EOF

systemctl restart splunk
在Splunk web界面进行搜索就可以看到任务了
Tip:以该方式添加文件和目录是最好的方式,特别是批量导入的时候以及设置源类型的时候

2.2.2.4.CLI方式批量导入

该方式有两种方法

  • splunk add oneshot /var/log/vmware-vmsvc.log -sourcetype linux_vm
  • 将需要索引的文件拷贝到Splunk安装目录下的var/spool/splunk,再使用命令splunk spool yum.log -sourcetype linux_yum

2.2.2.监视远程Windows事件日志

前面讲的都是收集本机的数据,现在我们需要收集远程主机的数据,那该怎么做呢?这里有点类似与某些监控软件比如Zabbix,我们需要在远程主机上安装一个转发器用来收集数据,然后推送给Splunk服务器,具体步骤如下:

  • 配置索引接收器
  • 被监控机上部署通用转发器
  • 在通用转发器上配置将数据转发至Splunk Enterprise索引器
  • 在通用转发器上配置将数据发送至Splunk Enterprise

Splunk Enterprise配置索引接收器一般有三种方式:GUI、CLI、配置文件的方式
GUI方式同监控splunk服务器本身
CLI方式
splunk enable listen <port> -auth <username>:<password>

配置文件的方式
cat splunk安装目录/etc/systemc/local/inputs.conf

[default]
host = SplunkEnterprise
[splunktcp://9997]
disabled = 0

Windwos机器上部署通用转发器
WindowsUF
splunk官网上下载对应系统的通用转发器后选择自定义安装,安装步骤如下
0512
0513
0514
0516

上面的一系列GUI操作已经把我们前面关于推送数据到Splunk Enterprise所说的步骤中的后面3步完成了,其中最重要的步骤其实就是将转发器配置为将数据发送至Splunk Enterprise索引器定义转发器的输入,但是这两步骤其实是可以通过命令行和配置文件完成
下面简单说明一下
将转发器配置为将数据发送至Splunk Enterprise索引器
./splunk add forward-server 10.8.8.2:9997
定义转发器的输入
方式一、CLI方式
.\splunk enable eventlog System
.\splunk enable eventlog Security
.\splunk enable eventlog Application
方式二、配置文件方式
记事本打开inputs.conf,输入如下内容
[WinEventLog://Application]
disabled = 0
[WinEventLog://Security]
disabled = 0
[WinEventLog://System]
disabled = 0

2.2.3.监视远程Linux系统日志

一样也是在主机上部署对应的通用转发器,转发器的最重要的两部和windows类似
将转发器配置为将数据发送至Splunk Enterprise索引器
./splunk add forward-server 10.8.8.2:9997
定义转发器的输入
方式一、CLI方式
./splunk add monitor /var/log/messages -sourcetype linux_mess -index oppo
方式二、配置文件方式
cat inputs.conf

[monitor:///var/log/messages]
disabled=false
sourcetype=linux_mess
index=oppo

2.3.网络端口获取数据

2.3.1.GUI方式

Splunk Enterprise接收UDP端口的数据,具体配置如下
登陆Splunk EnterpriseWeb界面,添加数据,监视,TCP/UDP端口,选择UDP,填入端口514,下一步,选择来源类型,检查,完成,可以在搜索框中进行搜索sourcetype=你选择的来源类型
其原理:Splunk创建套接字来监听特定的TCP和UDP端口,并索引从该端口接收到的数据

2.3.2.CLI添加网络输入

splunk add udp 514 -sourcetype syslog

2.3.3.配置文件方式

cat inputs.conf

[udp://514]
sourcetype=syslog

2.4.脚本输入

输入的数据除了日志文件和网络端口,还可以来源于脚本,脚本输入是主动通过命令去抓去数据,而网络端口和日志文件是主动去推送数据到splunk,下面的一些列图对脚本输入做了简单的示范:
0520
下一步,建立源类型和索引
0521
检查完成,开始搜索
这里给一个示范脚本
cat test.sh

#!/bin/bash
    
date +%Y-%m-%d" "%H:%M:%S

下面是搜索到的数据
0522
脚本输入有三点需要注意:

  • 每个脚本只能运行一个实例,即不能重复使用该脚本来对splunk输入,如果该脚本被阻塞,必须先解决故障,才能继续执行
  • 脚本发生的标准错误会写入到splunkd.log中去
  • 脚本必须放在$SPLUNK_HOME/bin/scripts中,如果想执行该目录之外的脚本,可以在该目录中的脚本调用

2.5.模块输入

当脚本通过不同的参数有不同的输出结果时怎么办,前面提到了一个脚本只能有一个实例存在,splunk本身对脚本不具有自定义功能,这个时候我们可以将脚本封装到可复用应用程序中,这样splunk可以显示各种参数方便配置了
我们先安装一个app
查找更多应用-搜索框输入command modular input进行安装
设置-数据输入-选择-命令,我们配置完成后如下图所示
0523
0524
注意上图,我们需要先创建源类型和索引,注意上面有个streaming output如果勾选,那么在一分钟内会不停的显示结果
我们可以作个比较,不勾选查询的结果如下图
0525
一次性显示所有结果,一分钟内只显示一次
0526
一次性只显示部分结果,一分钟内显示59次,且显示的内容其实只是每分钟索引的数据的部分内容,只是重复显示而已

2.6.使用通用转发器来收集数据

Universal Forwarder和Splunk Enterprise类似,但不具有Web界面,它可以将主机的数据进行采集然后转发到Splunk服务器上进行索引,但是转发器不具有数据预处理的功能,如执行换行和提取时间戳,前面已经讲解过如何通过通用转发器来采集数据将其发送至Splunk服务器进行索引。
转发器转发数据的优势:转发器默认会与索引器在TCP端口9997进行通信,转发器也能通过配置来对多个索引器上的数据进行负载均衡,增加搜索的速度和可用性,同时还能够配置转发器,使其在与索引器通信丢失时对接收的数据进行队列排序,如果索引器接收的数据不是从日志文件或者性能计数器读取的话,这一点至关重要,因为这样的数据无法重新读取
下面是一个示范性的配置转发器输出到索引器的配置
cat outputs.conf

[tcpout]
defaultGroup = default-autolb-group

[tcpout-server://10.8.8.5:9997]

[tcpout:default-autolb-group]
disabled = false
server = 10.8.8.5:9997,10.8.8.6:9997

2.7.加载本地应用程序

管理应用-上载应用程序,完成后可以在应用管理里看到安装的应用,我们使用的是书中给的一个样本数据,数据是通过脚本生成的,但是默认脚本没有启用,我们可以去启用脚本
样本数据
设置-数据输入-脚本-启用对应系统的脚本
设置-数据输入-文本-启用对用系统的文件
进行搜索index=main sourcetype=log4j OR sourcetypr=access_combined

2.8.自定义字段提取

splunk的内置功能可以通过常见的源类型来识别数据中的字段,比如可以自动提取日志中的json格式数据和键值对,但是原始数据中的字段是无法提取的,我们需要自定义字段并通过正则来提取内容
我们下面利用样本数据来示范如何自定义字段
设置-字段-字段提取-新字段提取,进行如下配置
0527
上面是定义了一个response字段来提取数据中的响应时间
所有的字段提取都保存在props.conf和transforms.conf,本例生成的props.conf在目录/opt/splunk/etc/users/wangteng/search/local中

2.9.事件类型和标签

事件类型就是再通过索引或者源类型搜出的结果中对部分符合搜索的进行定义,具体设置步骤为
设置-事件类型-新建,配置如下
0528
可以搜索eventtype=HttpRequest-Success或tag=webserver,这里面eventtype和tag是自定义字段,但是这个两个字段是我们在定义事件类型的时候就会自动创建的,不需要额外通过字段功能去创建
也可以通过配置文件来创建事件类型和标签
cat /opt/splunk/etc/system/local/eventtypes.conf

[HttpRequest-Success]
search = status=2*

cat /opt/splunk/etc/system/local/tags.conf

[eventtype=HttpRequest-Success]
Webserver = enabled