系统日志对于任何公司都是非常重要的。日志记载着各个系统状态、设备的访问使用等等的情况。
有助于我们发现设备的故障,协助我们检查网络访问的合规性,找到应用的异常信息等等。
目前很多公司都有建立自己的日志管理系统,大公司将日常日志的保存与管理看作公司IT运行的最重要任务之一。内外部的审计,日志保存与管理也是重要的一环。
系统日志分类:网络设备日志, 操作系统日志, 应用程序日志
简单架构一:
仅使用最基本的ELK( ElasticSearch、Logstash 和 Kibana )组件,这种架构非常简单,使用场景也有限。可以构建于单独的一台机器上使用。适用于数据量不大,吞吐量小的小微环境。
简单架构二:
引入更为轻量型的Beat组件作为日志收集的工具,解放相对笨重且耗资源的Logstash,使其只用作数据集中处理的组件。
引入消息队列机制的架构一:
日志的使用并非实时性很高的业务,但是日志的完整性是需要确保的。
业务高峰时段数据量大,为了缓解日志解析的压力,可以增加消息队列机制,
可以缓存数据源收集过来的日志并等到非高峰业务时期再进行日志解析。
日志收集可以使用更加轻量型的Beat,也可以直接rsyslog吐给消息队列。消息队列可以是Kafka,也可以使redis。Kafka对于大数据量的业务使用较为广泛。
1.从卡夫卡输入例
input {
kafka {
bootstrap_servers => "172.30.0.182:9092"
topics => ["log-pa167"]
type => "log-pa167"
}
}
2.从redis输入例
input {
redis {
host => "172.30.0.182"
port => "6379"
db => "6"
data_type => "list"
key => "demo"
}
}
引入消息队列机制的架构二:
为了确保不出现单点故障,也确保数据在缓存期间的完整性。可以给消息队列再增加集群机制,引入zookeeper分布式协调器即可实现这个需求。通过各Beat组件,或者Logstash组件收集日志给到收集用的各个Logstash服务器,再转储到由zookeeper控制的kafka集群消息队列。再发给Logstash(亦可以是多台,订阅kafka中不同的topic)进行分析和转储至ES。多台ES可以实现集群化,保证最终数据存储的安全性。
使用logstash-output-zabbix插件,将logstash收集到的数据过滤出异常日志输出到ZABBIX实现告警推送,有些自身无法恢复的item要trapper模式并设置自动恢复。
具体过滤告警方式上一篇介绍过了。
安全性和日志隔离:
ELK7版本以后将x-pack模块加入了默认的安装包中,配置文件中将其开启,即可获得免费的安全功能;
通过elasticsearch-setup-passwords命令,进行各个安全相关密码的初始化自动或交互方式生成内置账户密码:
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto/interactive
ELK内置账户及其功能
ELK免费订阅可以实现的安全功能
2.Elasticsearch是一个基于Lucene的搜索服务器
Elasticsearch提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。
Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。
Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便
它不仅包括了全文搜索功能,还可以进行以下工作:
分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。
实时分析的分布式搜索引擎。
可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。
主要概念:
接近实时(NRT),集群(cluster),节点(node),索引(index),类型(type),文档(document),分片和复制(shards & replicas)
系统参数的主要性能调优方向:
Disable swapping
Increase file descriptors
Ensure sufficient virtual memory
Ensure sufficient threads
JVM DNS cache settings
Temporary directory not mounted with noexec
TCP retransmission timeout
关于磁盘空间调优:
禁用_source,空间占用量下降30%左右;
禁用doc values,空间占用量下降10%左右;
压缩算法将LZ4改为Deflate,空间占用量可以下降15%~25%。
disable doc_value会怎样
消极影响:sort、aggregate、access the field from script将会无法使用
积极影响:节省磁盘空间
3. Kibana 是一款免费开源的前端应用程序,其基础是 Elastic Stack,可以为 Elasticsearch 中索引的数据提供搜索和数据可视化功能。
GUI上kibana主要菜单和作用
Discover--查看从es导入kibana的数据,选取字段
dashboard--看板-多图集合
canvas帐篷--基于图像的数据分布,如人体各部位服装的销售数据等--有demo
Maps--基于地理的图片展示,热点展示--无demo,用到geoip
Machine learning-机器学习,创建job根据数据和模型学习趋势
Graph--有demo
Visualize--根据数据作图
observability:
Logs--kibana自身日志
Metrics--对应metricsbeat,安装在elk各个节点或监控主机上,深度检测性能
APM--application performance monitoring,搜集app端的深度性能数据和错误,需要设置apm server
Uptime--集群环境下搜集心跳数据,生成索引 heartbeat-7*
Security
SIEM-安全信息和事件管理(SIEM)是一个软件解决方案
management
Devtools--REST API管理数据索引角色等对象
Stack monitoring-需要开各个节点metrics
Stackmanagement-通过导航栏管理stack各个组件
项目大体架构为:
基本作图样式1:Paloalto防火墙流量日志
样式2,windows事件日志