splunk是一款非常优秀的运维管理平台。Splunk 是机器数据的引擎。使用 Splunk 可收集、索引和利用所有应用程序、服务器和设备生成的快速移动型计算机数据 。 使用 Splunking 处理计算机数据,可让您在几分钟内解决问题和调查安全事件。监视您的端对端基础结构,避免服务性能降低或中断。以较低成本满足合规性要求。关联并分析跨越多个系统的复杂事件。获取新层次的运营可见性以及 IT 和业务智能。

splunk 有多种方式来收集数据,这里只介绍其中一种—— HTTP事件收集器

splunk默认的可用索引只有三个:history main summary ,如果有多个项目的日志需要记录,那么只有这三个索引明显是不够的。所以我们需要自定义索引。

有三种方式来创建自定义索引:web网页、命令行、配置文件。

web网页方式,根据web上的提示即可成功创建索引。

命令行方式,比较少用,每次只能用一次,且将命令中的参数写入文件,即可变为配置文件。

配置文件方式,可以重复使用,它参数就是命令行中的参数。

通过docker-compose.yaml可以实现splunk index自动创建、配置.

配置文件如下:

docker-compose.yaml

splunk:
image: splunk/splunk:latest # 指定 splunk 镜像
container_name: splunk # docker 容器名
restart: always # 是否重启
volumes:
- ./splunk_dev/data:/opt/splunk/etc # 数据文件
- ./splunk_dev/conf:/opt/splunk/var # 配置文件
- ./splunk_dev/indexes.conf:/opt/splunk/etc/system/local/indexes.conf # 映射 indexes.conf 文件,具体内容见下面
- ./splunk_dev/inputs.conf:/opt/splunk/etc/apps/splunk_httpinput/local/inputs.conf # 映射 inputs.conf 文件,具体内容见下面
environment:
SPLUNK_START_ARGS: --accept-license
SPLUNK_ENABLE_LISTEN: 9997
SPLUNK_ADD: tcp 1514
SPLUNK_CMD_1: "set minfreemb 500 -auth admin:changeme" # 修改磁盘空间,可用磁盘空间不足500M时,会暂停索引。splunk免费版,这个数要小于等于500,不然报错
SPLUNK_CMD_2: "edit user admin -tz Asia/Shanghai -auth admin:changeme" # 修改用户时区,默认使用的零时区,即:当搜索日志时,会发现日志时间要早8个小时
SPLUNK_CMD_3: "restart" # 重启splunk使上述配置生效
ports:
- "8080:8000" # 配置docker 端口映射 访问 localhost:8000即可访问 splunk网页版
- "8088:8088" # 该端口是 HTTP事件收集器 使用的端口
在项目指定目录内创建 indexes.conf 文件,在本例中就是在项目的 splunk_dev 目录下创建的。
该文件的作用是 创建一个自定义的 index [customer_index] # index 的名字
homePath=/opt/splunk/var/lib/splunk/customer_index/db/ # 存储路径
coldPath=/opt/splunk/var/lib/splunk/customer_index/colddb/
thawedPath=/opt/splunk/var/lib/splunk/customer_index/thaweddb/
在项目指定目录内创建 inputs.conf 文件,在本例中就是在项目的 splunk_dev 目录下创建的。
该文件的作用是 配置和关联 上面创建的 index [http]
disabled=0 # 全局启用 HTTP 事件收集器 [http://customer_collecter] # 指定 index 关联的 HTTP事件收集器的名字 ,splunk 会自动创建该HTTP事件收集器
disabled=0 # 启用该 HTTP 事件收集器 可省略
token=4B28FED9-1FA7-4E67-A426-7B4DFA0A0624 # 指定index 的 token
index=customer_index # 关联 index

此时通过 docker-compost up -d即可创建splunk ,通过浏览器访问 localhost:8080即可登陆splunk

通过如下命令即可向splunk 发送一条日志,以验证splunk启用成功

curl -k https://localhost:8088/services/collector -H 'Authorization: Splunk 4B28FED9-1FA7-4E67-A426-7B4DFA0A0624' -d '{"sourcetype": "mysourcetype", "event":"Hello, World!"}'

如果想将 splunkdjango结合使用,需要安装 splunk-handler,然后在django 配置文件中添加如下内容:


# logging
LOGGING = {
'version': 1,
'formatters': {
'simple': {
'format': '%(asctime)s %(levelname)s %(module)s[%(lineno)d] %(message)s'
},
'json': {
'()': 'pythonjsonlogger.jsonlogger.JsonFormatter',
'format': ('%(asctime)s %(created)f %(exc_info)s %(filename)s %(funcName)s %(levelname)s %(levelno)s '
'%(lineno)d %(module)s %(message)s %(pathname)s %(process)s %(processName)s %(relativeCreated)d '
'%(thread)s %(threadName)s')
},
},
'handlers': {
'stdout_console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'stream': sys.stdout,
'formatter': 'simple',
},
'splunk': {
'level': 'DEBUG',
'class': 'splunk_handler.SplunkHandler',
'formatter': 'json',
'host': '127.0.0.1',
'port': 8088,
'token': '4B28FED9-1FA7-4E67-A426-7B4DFA0A0624',
'index': 'customer_index',
'sourcetype': 'json',
'verify': False,
'multiple_process': True,
},
},
'loggers': {
'django.request': {
'handlers': ['stdout_console', 'splunk'],
'propagate': False,
'level': 'DEBUG',
},
'console_logger': {
'level': 'DEBUG',
'handlers': ['stdout_console', 'splunk'],
'propagate': False
}
}
}

splunk + docker-compose 实现自定义 index的更多相关文章

  1. Docker compose学习笔记

    一.compose compose 作用 你的应用可能需要很多个服务,比如web服务,数据库服务,缓存服务等等.我们可以把这些服务放到单独的容器里面,如果手工去配置这些服务会有些麻烦,docker c ...

  2. Docker 核心技术之Docker Compose

    Docker Compose 简介 Docker Compose是什么? Docker Compose是一个能一次性定义和管理多个Docker容器的工具. 详细地说: Compose中定义和启动的每一 ...

  3. 附003.Docker Compose命令详解

    一 Docker Compose命令格式 Usage: docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...] docker- ...

  4. 一文掌握Docker Compose

    目录 Docker Compose介绍 Docker Compose安装 Docker Compose基本示例 1.基本文件及目录设置 2.创建一个Dockerfile 3.通过docker-comp ...

  5. docker——三剑客之Docker Compose

    编排(Orchestration)功能是复杂系统实现灵活可操作性的关键.特别是在Docker应用场景中,编排意味着用户可以灵活的对各种容器资源实现定义和管理. 作为Docker官方编排工具,Compo ...

  6. Docker入门-docker compose的使用

    Compose简介 Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排.其代码目前在https://github.com/docker/compose 上开源. ...

  7. Docker Compose编排工具部署lnmp实践及理论(详细)

    目录 一.理论概述 编排 部署 Compose原理 二.使用docker compose 部署lnmp 三.测试 四.总结 一.理论概述 Docker Compose是一个定义及运行多个Docker容 ...

  8. Docker Compose 项目打包部署

    Docker Compose 前面我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build.docker run 等命令操作容器.然而微服务架构的应用系统一 ...

  9. 什么,容器太多操作不过来?我选择Docker Compose梭哈

    接上一篇:面试官:你说你精通 Docker,那你来详细说说 Dockerfile 吧 一.容器之间通信 1.单向通信 1.1.什么意思 mysql和tomcat是两个独立的容器,但是tomcat需要和 ...

随机推荐

  1. easyUI的combotree的树的懒加载。

    var tree=[{    "id":1,    "text":"My Documents",    "children&quo ...

  2. 02-创建String对象

    创建一个String对象实在是太简单了,就是因为简单,所以有很多java程序员做了好几年的开发,也没有注意这些小细节问题 String字符串的本质就是char数据对象, 那么char[0]数组当中的一 ...

  3. javascript-添加 class 类 和 移出 class 类 方法

    /* 添加 class 类 和 移出 class 类 方法*/ function addClass(element, className) { if(!new RegExp("(^|\\s) ...

  4. Unity中进程间通信——使用异步Socket

    开发Unity项目过程中,即时通信功能来完成服务器与客户端自定义的数据结构封装. 如果要序列化和数据封装参考:Unity3D之C#用Socket传数据包 蓝鸥3G封装的类 客户端脚本ClientScr ...

  5. C#深入解析委托——C#中为什么要引入委托

    引言: 对于一些刚接触C# 不久的朋友可能会对C#中一些基本特性理解的不是很深,然而这些知识也是面试时面试官经常会问到的问题,所以我觉得有必要和一些接触C#不久的朋友分享下关于C#基础知识的文章,所以 ...

  6. sublime格式化js、css、html的通用插件-html js css pretty

    sublime格式化js.css.html的通用插件-html js css pretty: 这个插件可以格式化基本上所有js html css文件,包括写在html中的js代码 ,可以在packag ...

  7. 动态添加布局、动态添加View、LinearLayout动态添加View;

    LinearLayout提供了几个方法,用作动态添加View特别好用: 可以添加View.删除View.删除指定位置View.删除全部View: 看代码: public class MainActiv ...

  8. Python网络爬虫http和https协议

    一.HTTP协议 1.官方概念: HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文 ...

  9. 对于Servlet、Servlet容器以及一个Servlet容器-Tomcat

    Servlet.Servlet容器等内容讲解 转载自http://blog.csdn.net/iAm333 对于Servlet.Servlet容器以及一个Servlet容器-Tomcat这些概念讲解的 ...

  10. 笔记:js疑难复习

    apply 和 call的区别 call 和 apply 的区别只在于这两个函数接受的参数形式不同 var Person = function(name,age){ this.name = name; ...