Splunk安装、配置 && web检索、对外提供api

一、背景

本周bobo项目例会,我们有涉及根据查询以往日志获取绑定状态的需求。项目组讨论说可以研究一下splunk,看是否可以利用到项目中。我原来也没有接触过,表示可以研究下。
用时:大概1天

二、整体流程
  • 建一个服务端,用来接收各个机器的日志。服务端有web页面,可以检索。服务端也可以对外提供api接口,供第三方应用去获取信息。
  • 每个日志服务器上建一个客户端(通用转发器),用来收集日志给服务端。
三、安装

下载地址:官网 https://www.splunk.com/

  • 服务端
    splunk-7.1.2-a0c72a66db66-linux-2.6-x86_64.rpm
rpm -ivh --prefix=/data/test/  splunk-7.1.2-a0c72a66db66-linux-2.6-x86_64.rpm
cd  /data/test/splunk/bin
./splunk start --accept-license 
输入想设置的密码再次确认即可

查看和修改端口的命令分别如下:

./splunk show splunkd-port
./splunk set splunkd-port 80**

web访问:http://127.0.0.1:8000 admin/设置的密码

  • 客户端(通用转发器)
    splunkforwarder-7.1.2-a0c72a66db66-linux-2.6-x86_64.rpm
rpm -ivh  splunk-7.1.2-a0c72a66db66-linux-2.6-x86_64.rpm
cd  /opt/splunkforwarder/bin
./splunk start --accept-license 
输入想设置的密码再次确认即可

注意:如果splunk 服务和通用转发器安装在同一台服务器,通用转发器的管理端口也是8090,会有冲突,有冲突的时候会提示,选择yes,修改端口即可。

四、配置
  • 服务端配置 转发和接收
    登录web页面-设置-转发和接收-配置接收,点击 +新增,可以就用建议的 9997 作为接收数据的端口。

  • 客户端配置服务和监听文件
    设置客户端的输出(发送的服务器和端口):./splunk add forward-server server_ip:9997
    查看你的输出设置:./splunk list forward-server
    注册客户端到服务器:./splunk set deploy-poll server_ip:8089
    监控日志的目录或者文件:
    ./splunk add monitor /opt/product/data/bblive/logs/schedule.log

以上客户端的输入和输出配置也可以通过修改他的配置文件来生效。
监控哪些目录可以修改:$SPLUNK_HOME/etc/system/local/input.conf
格式如下:
host = 本机的hostname
[monitor://日志地址(这里可以使用正则来过滤数据)]
index=indexName
sourcetype=sourceName
[monitor://另一个]
index=indexName
sourcetype=sourceName
[monitor:///xxx/xxx/log/xxx/xxx.log]
index=xxxxxxxx
sourcetype=xxxxxx

转发数据到哪可以修改:$SPLUNK_HOME/etc/system/local/output.conf

[root@local]# cat outputs.conf 
[tcpout]
defaultGroup = default-autolb-group

[tcpout:default-autolb-group]
server = 192.168.***.**:9997

[tcpout-server://192.168.***.***:9997]

配置修改需要重启客户端。配置好后web的搜索界面看到索引的目录里面的日志文件了。

五、web页面搜索
Splunk安装、配置 && web检索、对外提供api_第1张图片
根据SN号检索.png

到目前为止,如果作为运维人员平时搜索日志,其实已经满足了。到这一步已经和 FileBeat +Logstash +Elasticsearch+Kibana 功能一样了,但是我感觉 spunk更便捷。其实,splunk的检索应该是很强大的,也可以自己定义规则对日志做统计,生成报表和仪表盘,我研究的还不深入,后面可以继续探索。

六、对外提供API接口

研发的需求是希望splunk可以对外提供接口,供我们的内部应用调用访问。研究下来,目前可以搜索接口:

例如:现网的日志格式为:
Splunk安装、配置 && web检索、对外提供api_第2张图片
日志格式.png

主要思路:利用SN号查询到request 的 taskseq 号,再利用taskseq 查到 response里面的 在线状态 online。
Splunk的搜索接口(测试地址):

https://192.168.***.****:8089/services/search/jobs

以下是命令行方式调用接口:
curl -k -u admin:passwd https://192.168.220.***:8089/services/search/jobs -d search="search source=\"/opt/product/shtel_iptv_bobo_touping/logs/message.log\" 000600191******4780AD queryStatus | head 5"
以上命令获取到 message.log 日志中,SN号是 000600191******4780AD 且查询类型是 queryStatus 的前5条数据。
返回:



  1535002930.69

拿到返回的 sid号,再执行:
curl -k -u admin:passwd https://192.168.***.***:8089/services/search/jobs/1535002930.69/results/ --get -d output_mode=csv

或者放到 json里面:
curl -k -u admin:passwd https://192.168.***.***:8089/services/search/jobs/1535002930.69/results/ --get -d output_mode=json 2>/dev/null >out.json

得到 taskseq 为 1844674407<再次拿着得到 1844674407 去查
curl -k -u admin:passwd https://192.168.***.***:8089/services/search/jobs -d search="search source=\"/opt/product/shtel_iptv_bobo_touping/logs/message.log\" 1844674407 | head 5"

得到 为1535003009.70
再执行:
curl -k -u admin:passwd https://192.168.***.***:8089/services/search/jobs/1535003009.70/results/ --get -d output_mode=csv

就可以得到 在线状态了 online=true

现在对api的调用只是基于最基本的搜索功能,没有利用到splunk的统计功能,应该可以自己定义规则、字段、让splunk对日志信息做统计再输出给外部应用。目前的api搜索功能满足项目需求,已整理文档发给项目内部,研发表示可以使用。

<完!>

你可能感兴趣的:(Splunk安装、配置 && web检索、对外提供api)