小编Gia*_*uca的帖子

Docker应用程序使用Filebeat和Logstash进行日志记录

我有一组分散在多个服务器上的dockerized应用程序,并尝试使用ELK设置生产级集中式日志记录.我对ELK部件本身没问题,但我对如何将日志转发到我的logstashes有点困惑.我正在尝试使用Filebeat,因为它具有loadbalance功能.我还想避免将Filebeat(或其他任何东西)打包到我的所有码头工人中,并保持它分离,对接或不用.

我该怎么办?

我一直在尝试以下方面.我的Docker登录stdout所以配置了非dockerized Filebeat从stdin读取我做:

docker logs -f mycontainer | ./filebeat -e -c filebeat.yml

这似乎在开始时起作用.第一个日志将转发到我的logstash.我想是缓存的.但在某些时候它会卡住并继续发送相同的事件

这只是一个错误还是我朝错误的方向前进?你设置了什么解决方案?

logstash docker logstash-forwarder elastic-stack

22
推荐指数
4
解决办法
2万
查看次数

很长的方法总是需要重构吗?

我面临的情况是,我们有很多非常长的方法,1000行或更多.

为了给你提供更多细节,我们有一个传入的高级命令列表,每个命令都生成一个较长(有时很大)的低级命令列表.有一个工厂为每个传入命令创建一个类的实例.每个类都有一个处理方法,其中生成所有较低级别的命令按顺序添加.正如我所说,这些命令序列及其参数经常导致处理方法达到数千行.

有很多重复.许多命令模式在不同命令之间共享,但代码反复重复.这让我觉得重构是一个非常好的主意.

相反,我们的规格与当前代码完全相同.每个传入命令的命令列表很长.当我尝试一些重构时,我开始对规格感到不舒服.我想念规范和代码之间的明显比喻,并浪费时间深入研究新创建的公共类.

那么这里的问题是:一般来说,你认为这么长的方法总是需要重构,或者在类似的情况下它是可以接受的吗?(遗憾的是,重构规范不是一种选择)


编辑:我删除了每个"生成"的引用,因为它实际上令人困惑.它不是自动生成的代码.

class InCmd001 {

  OutMsg process ( InMsg& inMsg ) {

     OutMsg outMsg = OutMsg::Create();

     OutCmd001 outCmd001 = OutCmd001::Create();
     outCmd001.SetA( param.getA() );
     outCmd001.SetB( inMsg.getB() );

     outMsg.addCmd( outCmd001 );

     OutCmd016 outCmd016 = OutCmd016::Create();
     outCmd016.SetF( param.getF() );

     outMsg.addCmd( outCmd016 );

     OutCmd007 outCmd007 = OutCmd007::Create();
     outCmd007.SetR( inMsg.getR() );

     outMsg.addCmd( outCmd007 );

     // ......

     return outMsg;
  }
}
Run Code Online (Sandbox Code Playgroud)

这里是一个传入命令类的示例(用伪c ++手动编写)

c++ refactoring

21
推荐指数
5
解决办法
1965
查看次数

c ++ faq lite中的错误?

我正在这里阅读问题和答案几天.我已经看过Parashift中c ++ faq lite已被多次提及.就个人而言,我一直认为这是一个很好的参考,不是我最喜欢的,但肯定是有用的.在这里,我看到有人提出建议,但许多人反而反对.有人提到它充满了错误.如果有的话,请指出那里的主要错误是哪些?

c++ reference

9
推荐指数
1
解决办法
575
查看次数

set_union与multiset容器?

当一个或两个输入容器是具有重复对象的多个集合时,算法std:set_union的返回是什么?重复丢失了吗?

我们假设例如:

multiset<int> ms1;
ms1.insert(1);
ms1.insert(1);
ms1.insert(1);
ms1.insert(2);
ms1.insert(3);

multiset<int> ms2;
ms2.insert(1);
ms2.insert(1);
ms2.insert(2);
ms2.insert(2);
ms2.insert(4);

vector<int> v(10);
set_union( ms1.begin(), ms1.end(), ms2.begin(), ms2.end(), v.begin() );
Run Code Online (Sandbox Code Playgroud)

输出会是什么?

c++ containers stl stl-algorithm

6
推荐指数
1
解决办法
1341
查看次数

无符号字符数组的自动指针?

我需要一个像std :: auto_ptr这样的类来表示一个unsigned char*数组,用new []分配.但是auto_ptr只调用delete而不是delete [],所以我不能使用它.

我还需要一个创建并返回数组的函数.我在类ArrayDeleter中出现了我自己的实现,我在这个例子中使用了它:

#include <Utils/ArrayDeleter.hxx>

typedef Utils::ArrayDeleter<unsigned char> Bytes;

void f()
{
  // Create array with new
  unsigned char* xBytes = new unsigned char[10];
  // pass array to constructor of ArrayDeleter and
  // wrap it into auto_ptr
  return std::auto_ptr<Bytes>(new Bytes(xBytes));
}

...
// usage of return value
{
  auto_ptr<Bytes> xBytes(f());
}// unsigned char* is destroyed with delete[] in destructor of ArrayDeleter
Run Code Online (Sandbox Code Playgroud)

有更优雅的方法来解决这个问题吗?(即使使用另一个"流行"图书馆)

c++

3
推荐指数
1
解决办法
3054
查看次数

自动指针的容器

我知道不应该使用自动指针的容器,这可能会导致问题.这是什么原因?是否还有其他类型的"智能"指针可以安全地在容器中使用?

c++ stl auto-ptr

2
推荐指数
1
解决办法
299
查看次数