-
Notifications
You must be signed in to change notification settings - Fork 396
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: support host monitor #1890
base: main
Are you sure you want to change the base?
Conversation
6150e52
to
bfdd9c2
Compare
4110e3d
to
3e12438
Compare
|
||
int readCount = 0; | ||
WalkAllProcess(PROCESS_DIR, [&](const std::string& dirName) { | ||
if (++readCount > mProcessSilentCount) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
个数控制是不是也在控制缓存里的?不应该只是控制去直接操作系统交互的吗
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
缓存是为了计算增量的CPU使用率,前一次和后一次的top n进程可能不一样,所以需要保存所有的
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
|
||
#include "InputHostMeta.h" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
文档
ThreadPool mThreadPool; | ||
|
||
mutable std::shared_mutex mRegisteredCollectorMapMutex; | ||
std::unordered_map<std::string, bool> mRegisteredCollectorMap; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
std::unordered_map<std::string, bool> mRegisteredCollectorMap;
std::unordered_map<std::string, std::shared_ptr<BaseCollector>> mCollectorInstanceMap;
这两个变量有点不合理。
包括
1、HostMonitorInputRunner::GetCollector的使用上。应该是自闭环合法性
2、锁的关系等
3、RegisterCollector 操作的变量是 mCollectorInstanceMap,但是另一个没操作的变量却叫reg
可能的优化
1、保持现有逻辑。一组功能不用过多发散变量,以上改成一个map。value用结构体表示。整体实现结构优化下。
2、UpdateCollector时再注册ProcessEntityCollector实例,这样能省一个变量。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
|
||
const std::string ProcessEntityCollector::sName = "process_entity"; | ||
|
||
ProcessEntityCollector::ProcessEntityCollector() : mProcessSilentCount(INT32_FLAG(process_collect_silent_count)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- 线程池放入不会堵塞,runner拿到任务后,可以立刻放入线程池
- 在一个任务执行结束后,再放入下一个任务。一个任务超时,会计算从上一次执行时间开始,增加n个周期,到达下一个未来可执行的时间点。
nextExecTime = execTime + n * interval
#else | ||
ECSMeta ecsMeta; | ||
if (FetchECSMeta(ecsMeta)) { | ||
UpdateECSMetaAndHostid(ecsMeta); | ||
} | ||
#endif | ||
updateHostId(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
void DumpECSMeta(); | ||
#ifdef __ENTERPRISE__ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
不要用这么怪的方式
```yaml | ||
enable: true | ||
inputs: | ||
- Type: input_host_meta |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
与其他保持一致,补充完整
|
||
event->SetContent(DEFAULT_CONTENT_KEY_FIRST_OBSERVED_TIME, processCreateTime); | ||
event->SetContent(DEFAULT_CONTENT_KEY_LAST_OBSERVED_TIME, std::to_string(logtime)); | ||
auto interval = group.GetMetadata(EventGroupMetaKey::HOST_MONITOR_COLLECT_INTERVAL); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
1、采集配置中的间隔、host_monitor_default_interval 看上去并不是完全独立的参数。
2、凡是外部的参数都要有合法性保护,这里的也就是要有最小值。
// process entity | ||
const std::string DEFAULT_CONTENT_VALUE_ENTITY_TYPE_ECS_PROCESS = "acs.ecs.process"; | ||
const std::string DEFAULT_CONTENT_VALUE_ENTITY_TYPE_HOST_PROCESS = "infra.host.process"; | ||
const std::string DEFAULT_CONTENT_KEY_PROCESS_PID = "pid"; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
字段是如何跟安全保持一致的?
|
||
namespace logtail { | ||
|
||
HostMonitorInputRunner::HostMonitorInputRunner() : mThreadPool(ThreadPool(3)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
3 的合理性?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@@ -61,6 +61,8 @@ enum class EventGroupMetaKey { | |||
PROMETHEUS_STREAM_ID, | |||
PROMETHEUS_STREAM_TOTAL, | |||
|
|||
HOST_MONITOR_COLLECT_INTERVAL, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
使用的地方都属于input控制范围,可以通过HostMonitorInputRunner::UpdateCollector来传递
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
{"process_entity"},
RegisterCollector<ProcessEntityCollector>(); | ||
} | ||
|
||
void HostMonitorInputRunner::UpdateCollector(const std::vector<std::string>& newCollectors, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
保持变量含义的统一性,这里应该是collectornames。
std::string& entityType, | ||
std::string& hostEntityID, | ||
std::string& hostEntityType) { | ||
ECSMeta metaObj = HostIdentifier::Instance()->GetECSMeta(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
合库前需要:GetECSMeta的使用还需要完善下设计及实现
@@ -165,6 +165,8 @@ DEFINE_FLAG_STRING(loong_collector_operator_service, "loong collector operator s | |||
DEFINE_FLAG_INT32(loong_collector_operator_service_port, "loong collector operator service port", 8888); | |||
DEFINE_FLAG_INT32(loong_collector_k8s_meta_service_port, "loong collector operator service port", 9000); | |||
DEFINE_FLAG_STRING(_pod_name_, "agent pod name", ""); | |||
DEFINE_FLAG_INT32(host_monitor_default_interval, "default interval for host monitor", 60); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
调整的入口单一,没必要的入口去掉
|
||
namespace logtail { | ||
|
||
HostMonitorInputRunner::HostMonitorInputRunner() : mThreadPool(ThreadPool(3)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@@ -61,6 +61,8 @@ enum class EventGroupMetaKey { | |||
PROMETHEUS_STREAM_ID, | |||
PROMETHEUS_STREAM_TOTAL, | |||
|
|||
HOST_MONITOR_COLLECT_INTERVAL, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
{"process_entity"},
TODO: